迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

如何在 Java 代码中调用 Python 脚本

作者:迹忆客 最近更新:2023/08/07 浏览次数:

本文介绍了从 Java 代码调用 Python 脚本的三种不同方法。


从 Java 代码调用 Python 脚本

有时,我们必须从Java代码中调用Python脚本来满足项目需求。 我们可以使用 Process、ProcessBuilder 和 Jython 来做到这一点。 下面让我们看看如何使用它们。

使用 Process 类从 Java 代码运行 Python 脚本

我们可以使用 Java 的 Process 类从 Java 代码运行 Python 脚本。 让我们尝试创建一个 Python 脚本并使用 Java 代码运行它。 请按照以下步骤操作:

  1. 将 Python 脚本复制到 Java 中的字符串中。
  2. 使用 BufferedWriter 创建扩展名为 .py 的文件。
  3. 将上述字符串的内容写入 Python 文件并关闭 writer。
  4. 使用 Runtime.getRuntime().exec() 创建一个进程来运行 Python 文件。
  5. 使用 BufferedReader 从进程中读取数据。
  6. 使用或打印通过运行 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 脚本:

  1. 确保您的系统上安装了 Python。
  2. 创建一个扩展名为 .py 的 Python 脚本,或者如果您已有脚本,请选择一个。
  3. 创建 ProcessBuilder 类的实例并将 python 和脚本路径作为参数传递。
  4. 使用start()方法创建一个进程来运行ProcessBuilder; 这将执行 Python 脚本。
  5. 创建 BufferedReader 以从进程获取 Python 脚本的输出。
  6. 打印输出。

让我们用 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 环境:

  1. 从此处下载 Jython 独立版。
  2. 将 Jython-standalone-2.7.2.jar 添加到您的构建路径。
  3. 转到项目属性 -> Java 构建路径。
  4. 将外部 Jar 添加到您的类路径中。
  5. 选择 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 图像处理库

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

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 堆栈的大小

Java Goto

发布时间:2023/08/07 浏览次数:72 分类:Java

与其他编程语言不同,Java 没有 goto。 相反,Java 包含关键字 label。关键字 label 的作用是改变程序的流程,根据指定的条件跳转到程序的另一段。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便