Jython Java应用程序
下载 jython-standalone-2.7.0.jar - 从官方下载页面下载Jython用于嵌入Java应用程序: http://www.jython.org/downloads.html 并将此jar文件包含在Java的CLASSPATH环境变量中。
此库包含 PythonInterpreter 类。使用此类的对象,可以使用 execfile() 方法执行任何Python脚本。PythonInterpreter使您可以直接使用 PyObjects 。Jython运行时系统已知的所有对象都由PyObject类的实例或其子类之一表示。
PythonInterpreter类具有一些常用的方法,在下表中进行了解释。
序号 | 方法和描述 |
---|---|
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) 在本地命名空间中设置一个对象类型的变量 |
19 | set(String name, PyObject value) 在本地命名空间中设置一个PyObject类型的变量 |
20 | get(String) 获取本地命名空间中变量的值 |
21 | **get(String name, Class javaclass ** 获取本地命名空间中变量的值。值将作为给定Java类的实例返回。 |
以下代码块是一个包含嵌入Jython脚本的Java程序。 “hello.py”。使用PythonInterpreter对象的execfile()方法。 它还展示了如何使用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