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

- 方法三。

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

从 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 = 
                打印出 "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

你可能想看:
« 上一篇
下一篇 »

相关推荐

python爬虫教程PDF,Python爬虫书PDF

2026年09月02日

31阅读

外国教程python,python编程教学视频

2026年09月02日

25阅读

python简明教程沈洁元,python详细基础教程

2026年09月02日

21阅读

python库包教程,python 包

2026年09月02日

27阅读

python教程大全集,python教程600集

2026年09月02日

27阅读

python入门教程完整版,python零基础入门全套教程视频

2026年09月02日

23阅读