Jython - Java 应用程序


下载 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, Classjavaclass

获取 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 Java
hello world from Python
42
x: 4
Goodbye