Jython – Java应用程序
下载 jython-standalon-2.7.0.jar - 用于在Java应用程序中嵌入Jython,从其官方下载页面: http://www.jython.org/downloads.html,并在Java CLASSPATH环境变量中包含这个jar文件。
这个库包含 PythonInterpreter 类。使用这个类的对象,任何Python脚本都可以通过 execfile() 方法来执行。PythonInterpreter使你可以直接使用 PyObjects 。所有Jython运行系统知道的对象都由PyObject类或其子类之一的实例表示。
PythonInterpreter类有一些经常使用的方法,在下面的表格中解释。
编号:Sr.No. | 方法和描述 |
---|---|
1 | setIn(PyObject) 设置用于标准输入流的 Python 对象。 |
2 | setIn(java.io.Reader) 设置一个java.io.Reader,用于标准输入流。 |
3 | setIn(java.io.InputStream) 设置一个java.io.InputStream来作为标准输入流。 |
4 | setOut(PyObject) 设置用于标准输出流的Python对象。 |
5 | setOut(java.io.Writer) 设置用于标准输出流的java.io.Writer。 |
6 | setOut(java,io.OutputStream) 设置用于标准输出流的java.io.OutputStream。 |
7 | setErr(PyObject) 设置一个Python错误对象,用于标准错误流。 |
8 | setErr(java.io.Writer ) 设置一个java.io.Writer,用于标准错误流。 |
9 | setErr(java.io.OutputStream) 设置一个java.io.OutputStream,用于标准错误流。 |
10 | eval(String) 将一个字符串作为Python源进行评估并返回结果。 |
11 | eval(PyObject) 评估一个Python代码对象并返回结果。 |
12 | exec(String) 在本地命名空间中执行一个Python源字符串 |
13 | exec(PyObject) 在本地命名空间中执行一个Python代码对象。 |
14 | execfile(String filename) 在本地命名空间中执行一个Python源代码文件 |
15 | execfile(java.io.InputStream) 在本地命名空间中执行一个 Python 代码的输入流。 |
16 | compile(String) 将一个 Python 源代码字符串编译为表达式或模块。 |
17 | compile(script, filename) 将 Python 源码的一个脚本编译为表达式或模块。 |
18 | set(String name, Object value) 在本地命名空间中设置一个 Object 类型的变量。 |
19 | set(String name, PyObject value) 在本地命名空间中设置一个PyObject类型的变量。 |
20 | get(String) 获取本地命名空间中的一个变量的值 |
21 | **get(String name, Class javaclass **) 获取本地命名空间中的一个变量的值。该值将作为给定的Java类的一个实例返回。 |
下面的代码块是一个Java程序,它有一个嵌入的Jython脚本 “hello.py”.使用 PythonInterpreter对象的 ingexecfile() 方法。它还展示了如何使用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