Package org.python.util
Class PythonInterpreter
- java.lang.Object
-
- org.python.util.PythonInterpreter
-
- All Implemented Interfaces:
java.io.Closeable
,java.lang.AutoCloseable
- Direct Known Subclasses:
InteractiveInterpreter
public class PythonInterpreter extends java.lang.Object implements java.lang.AutoCloseable, java.io.Closeable
The PythonInterpreter class is a standard wrapper for a Jython interpreter for embedding in a Java application.
-
-
Constructor Summary
Constructors Constructor Description PythonInterpreter()
Creates a new interpreter with an empty local namespace.PythonInterpreter(PyObject dict)
Creates a new interpreter with a specified local namespace.PythonInterpreter(PyObject dict, PySystemState systemState)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
cleanup()
void
close()
PyCode
compile(java.io.Reader reader)
PyCode
compile(java.io.Reader reader, java.lang.String filename)
PyCode
compile(java.lang.String script)
Compiles a string of Python source as either an expression (if possible) or a module.PyCode
compile(java.lang.String script, java.lang.String filename)
PyObject
eval(java.lang.String s)
Evaluates a string as a Python expression and returns the result.PyObject
eval(PyObject code)
Evaluates a Python code object and returns the result.void
exec(java.lang.String s)
Executes a string of Python source in the local namespace.void
exec(PyObject code)
Executes a Python code object in the local namespace.void
execfile(java.io.InputStream s)
void
execfile(java.io.InputStream s, java.lang.String name)
void
execfile(java.lang.String filename)
Executes a file of Python source in the local namespace.PyObject
get(java.lang.String name)
Returns the value of a variable in the local namespace.<T> T
get(java.lang.String name, java.lang.Class<T> javaclass)
Returns the value of a variable in the local namespace.PyObject
getLocals()
PySystemState
getSystemState()
static void
initialize(java.util.Properties preProperties, java.util.Properties postProperties, java.lang.String[] argv)
Initializes the Jython runtime.void
set(java.lang.String name, java.lang.Object value)
Sets a variable in the local namespace.void
set(java.lang.String name, PyObject value)
Sets a variable in the local namespace.void
setErr(java.io.OutputStream outStream)
void
setErr(java.io.Writer outStream)
Sets aWriter
to use for the standard output stream,sys.stdout
.void
setErr(PyObject outStream)
Sets a Python object to use for the standard output stream,sys.stderr
.void
setIn(java.io.InputStream inStream)
Sets aInputStream
to use for the standard input stream.void
setIn(java.io.Reader inStream)
Sets aReader
to use for the standard input stream,sys.stdin
.void
setIn(PyObject inStream)
Sets a Python object to use for the standard input stream,sys.stdin
.void
setLocals(PyObject d)
void
setOut(java.io.OutputStream outStream)
Sets aOutputStream
to use for the standard output stream.void
setOut(java.io.Writer outStream)
Sets aWriter
to use for the standard output stream,sys.stdout
.void
setOut(PyObject outStream)
Sets a Python object to use for the standard output stream,sys.stdout
.static PythonInterpreter
threadLocalStateInterpreter(PyObject dict)
Creates a new interpreter with the ability to maintain a separate local namespace for each thread (set by invoking setLocals()).
-
-
-
Constructor Detail
-
PythonInterpreter
public PythonInterpreter()
Creates a new interpreter with an empty local namespace.
-
PythonInterpreter
public PythonInterpreter(PyObject dict)
Creates a new interpreter with a specified local namespace.- Parameters:
dict
- a Python mapping object (e.g., a dictionary) for use as the namespace
-
PythonInterpreter
public PythonInterpreter(PyObject dict, PySystemState systemState)
-
-
Method Detail
-
initialize
public static void initialize(java.util.Properties preProperties, java.util.Properties postProperties, java.lang.String[] argv)
Initializes the Jython runtime. This should only be called once, before any other Python objects (including PythonInterpreter) are created.- Parameters:
preProperties
- A set of properties. Typically System.getProperties() is used. preProperties override properties from the registry file.postProperties
- Another set of properties. Values like python.home, python.path and all other values from the registry files can be added to this property set. postProperties override system properties and registry properties.argv
- Command line arguments, assigned to sys.argv.
-
threadLocalStateInterpreter
public static PythonInterpreter threadLocalStateInterpreter(PyObject dict)
Creates a new interpreter with the ability to maintain a separate local namespace for each thread (set by invoking setLocals()).- Parameters:
dict
- a Python mapping object (e.g., a dictionary) for use as the default namespace
-
getSystemState
public PySystemState getSystemState()
-
setIn
public void setIn(PyObject inStream)
Sets a Python object to use for the standard input stream,sys.stdin
. This stream is used in a byte-oriented way, through calls toread
andreadline
on the object.- Parameters:
inStream
- a Python file-like object to use as the input stream
-
setIn
public void setIn(java.io.Reader inStream)
Sets aReader
to use for the standard input stream,sys.stdin
. This stream is wrapped such that characters will be narrowed to bytes. A character greater thanU+00FF
will raise a JavaIllegalArgumentException
from withinPyString
.- Parameters:
inStream
- to use as the input stream
-
setIn
public void setIn(java.io.InputStream inStream)
Sets aInputStream
to use for the standard input stream.- Parameters:
inStream
- InputStream to use as input stream
-
setOut
public void setOut(PyObject outStream)
Sets a Python object to use for the standard output stream,sys.stdout
. This stream is used in a byte-oriented way (mostly) that depends on the type of file-like object. The behaviour as implemented is:Python type of object o
writtenstr/bytes
unicode
Any other type PyFile
as bytes directly respect PyFile.encoding
call str(o)
firstPyFileWriter
each byte value as a char
write as Java char
scall o.toString()
firstOther PyObject
f
invoke f.write(str(o))
invoke f.write(o)
invoke f.write(str(o))
- Parameters:
outStream
- Python file-like object to use as the output stream
-
setOut
public void setOut(java.io.Writer outStream)
Sets aWriter
to use for the standard output stream,sys.stdout
. The behaviour as implemented is to output each objecto
by callingo.toString()
and writing this as UTF-16.- Parameters:
outStream
- to use as the output stream
-
setOut
public void setOut(java.io.OutputStream outStream)
Sets aOutputStream
to use for the standard output stream.- Parameters:
outStream
- OutputStream to use as output stream
-
setErr
public void setErr(PyObject outStream)
Sets a Python object to use for the standard output stream,sys.stderr
. This stream is used in a byte-oriented way (mostly) that depends on the type of file-like object, in the same way assetOut(PyObject)
.- Parameters:
outStream
- Python file-like object to use as the error output stream
-
setErr
public void setErr(java.io.Writer outStream)
Sets aWriter
to use for the standard output stream,sys.stdout
. The behaviour as implemented is to output each objecto
by callingo.toString()
and writing this as UTF-16.- Parameters:
outStream
- to use as the error output stream
-
setErr
public void setErr(java.io.OutputStream outStream)
-
eval
public PyObject eval(java.lang.String s)
Evaluates a string as a Python expression and returns the result.
-
exec
public void exec(java.lang.String s)
Executes a string of Python source in the local namespace.
-
exec
public void exec(PyObject code)
Executes a Python code object in the local namespace.
-
execfile
public void execfile(java.lang.String filename)
Executes a file of Python source in the local namespace.
-
execfile
public void execfile(java.io.InputStream s)
-
execfile
public void execfile(java.io.InputStream s, java.lang.String name)
-
compile
public PyCode compile(java.lang.String script)
Compiles a string of Python source as either an expression (if possible) or a module. Designed for use by a JSR 223 implementation: "the Scripting API does not distinguish between scripts which return values and those which do not, nor do they make the corresponding distinction between evaluating or executing objects." (SCR.4.2.1)
-
compile
public PyCode compile(java.io.Reader reader)
-
compile
public PyCode compile(java.lang.String script, java.lang.String filename)
-
compile
public PyCode compile(java.io.Reader reader, java.lang.String filename)
-
getLocals
public PyObject getLocals()
-
setLocals
public void setLocals(PyObject d)
-
set
public void set(java.lang.String name, java.lang.Object value)
Sets a variable in the local namespace.- Parameters:
name
- the name of the variablevalue
- the object to set the variable to (as converted to an appropriate Python object)
-
set
public void set(java.lang.String name, PyObject value)
Sets a variable in the local namespace.- Parameters:
name
- the name of the variablevalue
- the Python object to set the variable to
-
get
public PyObject get(java.lang.String name)
Returns the value of a variable in the local namespace.- Parameters:
name
- the name of the variable- Returns:
- the value of the variable, or null if that name isn't assigned
-
get
public <T> T get(java.lang.String name, java.lang.Class<T> javaclass)
Returns the value of a variable in the local namespace. The value will be returned as an instance of the given Java class.interp.get("foo", Object.class)
will return the most appropriate generic Java object.- Parameters:
name
- the name of the variablejavaclass
- the class of object to return- Returns:
- the value of the variable as the given class, or null if that name isn't assigned
-
cleanup
public void cleanup()
-
close
public void close()
- Specified by:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in interfacejava.io.Closeable
-
-