Java调用Python脚本的三种方法:Process、ProcessBuilder和Jython详解
- 方法三。

有时,我们得从 Java 代码里去调用 Python 脚本,以此来满足项目的需求。我们能够运用 Process、ProcessBuilder 以及 Jython 来达成这一目的。接下来让我们来瞧一瞧该如何使用它们。
利用 Process 类来让 Java 代码去运行 Python 脚本。
我们能够利用 Java 的 Process 类在 Java 代码中运行 Python 脚本。接着,让我们试着去创建一个 Python 脚本,并且用 Java 代码来运行它。以下是具体的操作步骤:
把 Python 脚本复制到 Java 里的字符串当中。借助 BufferedWriter 去创建一个扩展名为.py 的文件。把上述字符串的内容写入 Python 文件,之后关闭 writer。通过 Runtime.getRuntime().exec() 来创建一个进程,以运行 Python 文件。使用 BufferedReader 来从进程中读取数据。运用或打印通过运行 Python 代码而检索到的数据。
现在我们用Java代码来实现上述步骤:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.InputStreamReader;
public class Example {
public static void main(String a[]){
try{
String Python_Script =
打印出 "Hello, This is Jiyik.com!The Best Tutorial Site!" 。;
BufferedWriter Buffered_Writer = new BufferedWriter(
new FileWriter("DemoPythonFile.py"));
Buffered_Writer 将 Python_Script 写入。
Buffered_Writer.close();
Process Demo_Process = Runtime.getRuntime().exec("python DemoPythonFile.py");
BufferedReader Buffered_Reader = new BufferedReader(
new InputStreamReader(
Demo_Process.getInputStream()
));
}catch(Exception e){
e.printStackTrace();
}
}
}
上面的代码尝试在 Java 环境里创建并运行 Python 脚本,同时在 DemoPythonFile.py 文件里写入如下这些字符串。
值得一提的是,无需创建 Python 脚本并运行它;您能够直接加载 Python 脚本以及它的 Java 代码输出。
请注意,您或许会接收到关于 Runtime.getRuntime().exec() 函数被弃用的警示。这表明 Java 有可能在后续的版本里将此函数删除。
在 Java 代码中,可通过使用 ProcessBuilder 类来运行 Python 脚本。
Java 中的 ProcessBuilder 类具备创建操作系统进程的功能。我们能够利用这个类在 Java 环境中运行 Python 脚本。
3. 启动进程并获取输入输出流等相关操作。
请确认您的系统已安装 Python。创建一个扩展名为.py 的 Python 脚本,若您已有脚本,可进行选择。创建 ProcessBuilder 类的实例,并且把 python 以及脚本路径当作参数进行传递。使用 start()方法去创建一个进程,让其运行 ProcessBuilder;这个进程会执行 Python 脚本。接着创建 BufferedReader,以便从该进程中获取 Python 脚本的输出。最后打印出这些输出。
我们用 Java 来达成这个示例。我们所拥有的 Python 脚本为:
print()
下面是Java的实现:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Example {
public static void main(String[] args) throwsIOException 会引发,InterruptedException 也会出现。
String Script_Path = 在 C 盘的用户文件夹下,有一个名为 Sheeraz 的用户,其名下有一个名为 script.py 的文件。;
ProcessBuilder Process_Builder = new
ProcessBuilder("python",Script_Path)
.inheritIO();
Process Demo_Process = Process_Builder.start();
Demo_Process.waitFor();
BufferedReader Buffered_Reader = new BufferedReader(
new InputStreamReader(
Demo_Process.getInputStream()
));
String Output_line = "";
whileOutput_line 等于 BufferedReader 读取的一行内容,且该行内容不为空。null) {
Output_line 被 System 打印出来。
}
}
}
这段代码会利用 Java 来运行给定的 Python 脚本,并且会把该脚本打印在控制台上。来看一下输出情况:
使用 Jython 能够让 Python 代码和 Java 代码一同运行。
Jython 是一个项目,它通过 Java 代码来实现 Python 脚本。Jython 能够让 Python 代码和 Java 代码相互运行。
要在 Java 中使用 Jython,我们需要做的是下载 Jython-standalone-2.7.2.jar 或者任何最新的版本。然后,把它添加到项目的构建路径当中。以下是将 Jython 添加到 Java 环境的步骤:
从这里下载 Jython 独立版。把 Jython-standalone-2.7.2.jar 加到您的构建路径里。进入项目属性,找到 Java 构建路径。把外部 Jar 添加到您的类路径中。选取 Jython-standalone-2.7.2.jar ,然后点击应用并关闭。
Jython 被包含在我们的 Java 环境中后,我们现在就能够在 Java 中运行 Python 脚本了。执行 Python 脚本和进行操作的是来自 Jython 的 PythonInterpreter 类。
- 借助特定的框架或工具来达成运行目的。
方法说明
setIn(PyObject)
用于设置标准输入流的 Python 对象。
setIn(java.io.Reader)
[id_1004840515]
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(java.io.Writer)
用于设置标准错误流的 Java IO 编写器。
setErr(PyObject)
用于设置标准错误流的 Python 对象。
setErr(java.io.OutputStream)
用于设置标准错误流的一种 Java 的输入输出流(OutputStream)。
eval(String)
用于评估 Java 的 Python 字符串。
eval(PyObject)
用于评估 Java 的 Python 对象。
exec(String)
用于在本地命名空间中执行Python字符串。
exec(PyObject)
用于执行本地命名空间中的Python对象。
execfile(String filename)
用于执行本地命名空间中的Python文件。
execfile(java.io.InputStream)
在本地命名空间中执行 Python 的 InputStream。
compile(String)
用于将 Python 字符串编译为表达式模块。
compile(script, filename)
用于将 Python 脚本编译为表达式模块。
设定字符串 name 并赋予其对象 value 。
用于设置对象类型的变量。
设置(名称为 name,值为 value);将名称为 name 的内容设置为 value;把 name 这个名称所对应的内容设置为 value;为 name 这个名称赋予 value 这个值;使 name 这个名称对应的值为 value;给 name 这个名称设定 value 这个值;将 value 赋予 name 这个名称;让 name 这个名称具有 value 这个值;把 value 作为 name 这个名称的对应值。
用于设置 PyObject 类型的变量。
get(String)
用于获取变量的值。
获取指定名称的对象,该对象的类为指定的 Class 类型。获取名为 name 的对象,其所属的类为 javaclass 。通过指定名称 name 和类 javaclass 来获取相应的对象。
用于获取变量的值并将其作为给定 Java 类的实例返回。
现在,我们知晓了 Jython 项目里的方法。接着,让我们试着在我们的示例里运用其中的一些,比如在 script.py 文件中。
print()
Jython的实现:
importPythonInterpreter 来自 org.python.util 。
import org.python.core.*;
public class Example {
public static void main(String []args) throws PyException {
PythonInterpreter Python_Interpreter = new PythonInterpreter();
System.out.println(
);
// Run a Python file
Python_Interpreter.execfile("C:\\Users\\Sheeraz\\script.py");
运行不同的 Python 操作。
在 Java 中设置一个变量并使用 Python 进行打印。
Python_Interpreter.set("x", new PyInteger(100));
Python_Interpreter.exec("print x");
// Execute a sum
Python_Interpreter.exec("y = 25+45");
PyObject y = Python_Interpreter.get("y");
System.out.println("y: "+y);
}
}
上面的代码会从文件去执行 Python 脚本,并且会运用上表里的方法来运行一些 Python 操作。查看其输出。
100
y: 70
ProcessPoolExecutor Python并行编程 subprocess (processor n5095处理器怎么样)
java中调用python脚本,java调用python脚本,带入参和返回
如何通过Node.js和child_process模块实现JavaScript调用Python脚本进行机器学习开发
java中执行python脚本,java调用python脚本import包问题
processingpython教程,python processing交互
processing教程python,python process