src.org.python.modules.posix.PythonPOSIXHandler Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jython-standalone Show documentation
Show all versions of jython-standalone Show documentation
Jython is an implementation of the high-level, dynamic, object-oriented
language Python written in 100% Pure Java, and seamlessly integrated with
the Java platform. It thus allows you to run Python on any Java platform.
/* Copyright (c) Jython Developers */
package org.python.modules.posix;
import java.io.File;
import java.io.InputStream;
import java.io.PrintStream;
import java.util.logging.Level;
import jnr.constants.platform.Errno;
import jnr.posix.POSIXHandler;
import org.python.core.imp;
import org.python.core.Options;
import org.python.core.PrePy;
import org.python.core.Py;
import org.python.core.PyObject;
/**
* Jython specific hooks for our underlying POSIX library.
*/
public class PythonPOSIXHandler implements POSIXHandler {
@Override
public void error(Errno error, String extraData) {
throw Py.OSError(error, Py.newStringOrUnicode(extraData));
}
@Override
public void error(Errno error, String methodName, String extraData) {
throw Py.OSError(error, Py.newStringOrUnicode(extraData));
}
@Override
public void unimplementedError(String methodName) {
if (methodName.startsWith("stat.")) {
// Ignore unimplemented FileStat methods
return;
}
throw Py.NotImplementedError(methodName);
}
@Override
public void warn(WARNING_ID id, String message, Object... data) {
}
@Override
public boolean isVerbose() {
// Verbose if the general threshold for logging is FINE or lower.
return PrePy.getLoggingLevel().intValue() <= Level.FINE.intValue();
}
@Override
public File getCurrentWorkingDirectory() {
return new File(Py.getSystemState().getCurrentWorkingDir());
}
@Override
public String[] getEnv() {
PyObject items = imp.load("os").__getattr__("environ").invoke("items");
String[] env = new String[items.__len__()];
int i = 0;
for (PyObject item : items.asIterable()) {
env[i++] = String.format("%s=%s", item.__getitem__(0), item.__getitem__(1));
}
return env;
}
@Override
public InputStream getInputStream() {
return System.in;
}
@Override
public PrintStream getOutputStream() {
return System.out;
}
@Override
public int getPID() {
return 0;
}
@Override
public PrintStream getErrorStream() {
return System.err;
}
}