如何在 Java 代码中调用 Python 脚本
本文介绍了从 Java 代码调用 Python 脚本的三种不同方法。
从 Java 代码调用 Python 脚本
有时,我们必须从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 =
"print(\"Hello, This is Jiyik.com!The Best Tutorial Site!\")\n";
BufferedWriter Buffered_Writer = new BufferedWriter(
new FileWriter("DemoPythonFile.py"));
Buffered_Writer.write(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 文件中写入以下字符串。
Hello, This is Jiyik.com!The Best Tutorial Site!
值得一提的是,没有必要创建Python脚本然后运行它; 您还可以直接加载 Python 脚本及其 Java 代码输出。
请注意,您可能会收到有关 Runtime.getRuntime().exec() 函数弃用的警告,这意味着 Java 可能会在未来版本中删除此函数。
使用 ProcessBuilder 类从 Java 代码运行 Python 脚本
Java中的ProcessBuilder类用于创建操作系统进程。 我们还可以使用这个类在Java中运行Python脚本。
按照以下步骤使用 ProcessBuilder 类在 Java 中运行 Python 脚本:
- 确保您的系统上安装了 Python。
- 创建一个扩展名为 .py 的 Python 脚本,或者如果您已有脚本,请选择一个。
- 创建 ProcessBuilder 类的实例并将 python 和脚本路径作为参数传递。
- 使用start()方法创建一个进程来运行ProcessBuilder; 这将执行 Python 脚本。
- 创建 BufferedReader 以从进程获取 Python 脚本的输出。
- 打印输出。
让我们用 Java 来实现这个例子。 我们的 Python 脚本是:
print("Hello, This is Jiyik.com! The Best Tutorial Site!")
下面是Java的实现:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Example {
public static void main(String[] args) throws IOException, InterruptedException {
String Script_Path = "C:\\Users\\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 = "";
while ((Output_line = Buffered_Reader.readLine()) != null) {
System.out.println(Output_line);
}
}
}
上面的代码将使用 Java 执行给定的 Python 脚本并将其打印在控制台上。 查看输出:
Hello, This is Jiyik.com! The Best Tutorial Site!
使用 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 脚本。 PythonInterpreter 类来自 Jython,用于执行 Python 脚本和操作。
以下是 Jython 在 Java 中运行 Python 的不同方法:
方法 | 说明 |
---|---|
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(java.io.Writer) | 用于设置标准错误流的 Java IO 编写器。 |
setErr(PyObject) | 用于设置标准错误流的 Python 对象。 |
setErr(java.io.OutputStream) | 用于设置标准错误流的 Java IO 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 脚本编译为表达式模块。 |
set(String name, Object value) | 用于设置对象类型的变量。 |
set(String name, PyObject value) | 用于设置 PyObject 类型的变量。 |
get(String) | 用于获取变量的值。 |
get(String name, Classjavaclass) | 用于获取变量的值并将其作为给定 Java 类的实例返回。 |
现在,我们了解了 Jython 项目中的方法。 让我们尝试在我们的示例中使用其中的一些: script.py 文件:
print("Hello, This is Jiyik.com! The Best Tutorial Site!, Message from Python")
Jython的实现:
import org.python.util.PythonInterpreter;
import org.python.core.*;
public class Example {
public static void main(String []args) throws PyException {
PythonInterpreter Python_Interpreter = new PythonInterpreter();
System.out.println(
"Hello, This is Jiyik.com! The Best Tutorial Site!, Message from Java"
);
// Run a Python file
Python_Interpreter.execfile("C:\\Users\\Sheeraz\\script.py");
// Run Different Python operations
// Set a variable and print it using Python in java
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 操作。 查看输出:
Hello, This is Jiyik.com! The Best Tutorial Site!, Message from Java
Hello, This is Jiyik.com! The Best Tutorial Site!, Message from Python
100
y: 70
相关文章
5 个最好的 Java 图像处理库
发布时间:2023/08/07 浏览次数:178 分类:Java
-
本文介绍了 Java 中五个最好的图像处理库。5 个最好的 Java 图像处理库 Java 中提供了相当多的图像处理库可以用于图像处理。 有些库是付费的,有些是开源的; 我们选择了 5 个可用于 Java 图像
在 Java 中测试私有方法
发布时间:2023/08/07 浏览次数:52 分类:Java
-
This tutorial will discuss how to test the private method in Java.私有方法是外部无法访问的方法,这意味着外部无法调用它。 它仅适用于类的内部元素。在Java中测试私有方法 假设我们有一个如下所示的类需
用Java解析HTML
发布时间:2023/08/07 浏览次数:70 分类:Java
-
本文讨论如何解析 HTML 文件。 此外,我们将通过提供必要的示例和解释来讨论该主题,以使该主题更容易。Jsoup 在 Java 中的工作
Java Lang Runtime Java 中的 exec() 方法
发布时间:2023/08/07 浏览次数:85 分类:Java
-
本文介绍了 Java 的 Runtime.exec() 方法。Java Lang Runtime Java 中的 exec() 方法 Java Lang Runtime 类用于每个 Java 应用程序与类运行时实例和环境接口之间的交互。
控制 java.io.tmpdir 的环境变量
发布时间:2023/08/07 浏览次数:138 分类:Java
-
本文将介绍名为 java.io.tmpdir 的环境变量,它可用于调节 Java 的临时文件目录。Java虚拟机(JVM)可以生成临时文件并将它们存储在java.io.tmpdir系统参数指定的目录中。
Java 中的 Zulu
发布时间:2023/08/07 浏览次数:57 分类:Java
-
Zulu 是 Java 11 的一部分。它受到广泛的操作系统和硬件平台的支持。如何在 Java 中安装 Zulu 首先,从 Azul 的官方下载页面下载必要的 ZIP 或 TAR.GZ。
在 Java 中使用 Mockito 模拟静态方法
发布时间:2023/08/07 浏览次数:180 分类:Java
-
本文介绍了如何使用mockito来模拟Java中的静态方法。Java 中的模拟静态方法 在 Java 中执行单元测试时需要模拟静态方法。
JVM -XSS 选项
发布时间:2023/08/07 浏览次数:141 分类:Java
-
-Xss 标志主要用于更改 JVM 堆栈的大小。 让我们看一下下面的命令,通过这些命令我们可以更改 JVM 堆栈的大小。使用 -Xss 更改 JVM 堆栈的大小