下载 jython-standalone-2.7.0.jar - 要从官方下载页面将 Jython 嵌入到 Java 应用程序中:http://www.jython.org/downloads.html 此 jar 文件并将其包含在 Java CLASSPATH 环境变量中。
此库包含 PythonInterpreter 类。使用此类的对象,可以使用 execfile() 方法执行任何 Python 脚本。PythonInterpreter 使您能够直接使用 PyObject。Jython 运行时系统已知的所有对象都由类 PyObject 的实例或其子类之一表示。
PythonInterpreter 类有一些常用的方法,如下表所示。
方法 | 描述 |
---|---|
setIn(PyObject) |
设置要用于标准输入流的 Python 对象 |
setIn(java.io.Reader) |
设置用于标准输入流的 java.io.Reader |
setIn(java.io.InputStream) |
设置用于标准输入流的 java.io.InputStream |
setOut(PyObject) |
设置要用于标准输出流的 Python 对象 |
setOut(java.io.Writer) |
设置用于标准输出流的 java.io.Writer |
setOut(java,io.OutputStream) |
设置用于标准输出流的 java.io.OutputStream |
setErr(PyObject) |
设置用于标准错误流的 Python 错误对象 |
setErr(java.io.Writer) |
设置用于标准错误流的 java.io.Writer |
setErr(java.io.OutputStream) |
设置用于标准错误流的 java.io.OutputStream |
eval(String) |
将字符串作为 Python 源进行计算并返回结果 |
eval(PyObject) |
评估 Python 代码对象并返回结果 |
exec(String) |
在本地命名空间中执行 Python 源字符串 |
exec(PyObject) |
在本地命名空间中执行 Python 代码对象 |
execfile(String filename) |
在本地命名空间中执行 Python source 的文件 |
execfile(java.io.InputStream) |
在本地命名空间中执行 Python source 的输入流 |
compile(String) |
将 Python 源字符串编译为表达式或模块 |
compile(script, filename) |
将 Python source 的脚本编译为表达式或模块 |
set(String name, Object value) |
在本地命名空间中设置 Object 类型的变量 |
set(String name, PyObject value) |
在本地命名空间中设置 PyObject 类型的变量 |
get(String) |
获取 local 命名空间中变量的值 |
get(String name, Class |
获取 local 命名空间中变量的值。该值将作为给定 Java 类的实例返回。 |
以下代码块是一个 Java 程序,该程序具有 PythonInterpreter 对象的嵌入式 Jython 脚本 “hello.py”.usingexecfile() 方法。它还展示了如何使用 set() 和 get() 方法设置或读取 Python 变量。
import org.python.util.PythonInterpreter;
import org.python.core.*;
public class SimpleEmbedded {
public static void main(String []args) throws PyException {
PythonInterpreter interp = new PythonInterpreter();
System.out.println("Hello, world from Java");
interp.execfile("hello.py");
interp.set("a", new PyInteger(42));
interp.exec("print a");
interp.exec("x = 2+2");
PyObject x = interp.get("x");
System.out.println("x: "+x);
System.out.println("Goodbye ");
}
}
编译并运行上述 Java 程序以获得以下输出。
hello world from Python
42
x: 4
Goodbye