Jython 简明教程

Jython - Java Application

下载 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 类有一些常用方法,在下面给出的表中对此进行了说明。

Sr.No.

Method & Description

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 程序,它嵌入了 PythonInterpreter 对象的 “hello.py”.usingexecfile() 方法的 Jython 脚本。它还展示了如何使用 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