迹忆客 专注技术分享

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

从 Java 代码调用 Python 脚本

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

本篇文章介绍了从 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

上一篇:Python 中的位掩码简介

下一篇:没有了

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

本文地址:

相关文章

Python 中的位掩码简介

发布时间:2023/06/27 浏览次数:125 分类:Python

本篇文章介绍了 Python 中的位掩码,并演示了如何使用按位运算符(例如 AND、OR、NOT 等)执行位掩码。Python 中的位掩码简介 位掩码是几乎所有编程语言的通用概念;

在 Ubuntu 中卸载 Python

发布时间:2023/06/27 浏览次数:158 分类:Python

本文演示如何从 Ubuntu 中删除或卸载 Python。检查你的系统中是否安装了Python 使用 Ctrl+Alt+T 打开终端。打开终端后,使用命令 python3 --version 检查您的系统是否安装了 python。

Python Teradata 连接

发布时间:2023/06/27 浏览次数:86 分类:Python

本文将讨论一些基本的正确准则,并在讨论连接方式之前了解 Teradata 模块的工作原理。Python 中的 Teradata 数据库 您可以使用 Python 和 Teradata 模块编写与 Teradata 数据库的强大交互脚本。

在 Python 中查找素因数

发布时间:2023/06/27 浏览次数:175 分类:Python

本篇文章将介绍如何在 Python 中执行素因数分解。质因数分解概述 在数学中,数字的因子是那些可以除以给定数字且余数为零的数字。

在 Python 中从 URL 中提取域

发布时间:2023/06/27 浏览次数:86 分类:Python

本文将通过实际例子来讲解Python的 urlparse() 函数从URL中解析并提取域名。 我们还将讨论提高解析 URL 和使用其不同组件的能力。使用 urlparse() 从 URL 中提取域

Python 中的省略号对象

发布时间:2023/06/27 浏览次数:158 分类:Python

本篇文章将介绍 Python 中省略号对象的使用。使用省略号作为未编写代码的占位符 省略号对象可以以不同的方式使用。 它主要充当未编写代码的占位符。

实现 Python Builder 模式的不同方法

发布时间:2023/06/27 浏览次数:70 分类:Python

构建器模式是一种允许对象的创建与其表示分离的模式。 这种模式可以创建和配置复杂的对象而无需继承,这是一种强大但不灵活的方法。

Python 中的互相关

发布时间:2023/06/27 浏览次数:81 分类:Python

互相关是一种重要的信号处理方法,用于分析具有不同滞后的两个信号之间的相似性。 您不仅可以了解两个信号的匹配程度,还可以获得它们最相似的时间点或索引。本文将讨论在 Python 中处理

使用 Python Timedelta 月份计算日期

发布时间:2023/06/27 浏览次数:128 分类:Python

在本篇文章中,我们将通过 timedelta 学习如何在 Python 中使用日期时间。 我们将了解如何计算当前日期或任何其他日期六个月后的日期。

扫一扫阅读全部技术教程

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

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便