当前位置: 首页 > 技术教程

如何在Java中执行Python代码 Java调用Python文件的两种方法

  在Java项目中调用Python代码可以采用多种方法,其中最常用且有效的两种方式是使用Jython和通过Java的Runtime类或ProcessBuilder类调用Python脚本。小编将详细介绍这两种方法的实现步骤和注意事项。

  方法一:使用Jython

  Jython 是一个将Python代码在Java虚拟机(JVM)上运行的解释器,它允许Java程序直接调用Python代码,无需额外的进程管理。Jython支持Python 2.7版本,对于需要使用Python 3.x的项目,Jython可能不是最佳选择。

  步骤如下:

  添加Jython依赖:

  如果使用Maven项目,可以在pom.xml中添加Jython依赖:

  <dependency>

  <groupId>org.python</groupId>

  <artifactId>jython-standalone</artifactId>

  <version>2.7.2</version>

  </dependency>

  如果不使用Maven,可以从Jython官方网站下载JAR文件,并将其添加到项目的构建路径中。

  编写Java代码调用Python脚本:

  使用PythonInterpreter类来执行Python代码或脚本。

  示例代码如下:import org.python.util.PythonInterpreter;

  import org.python.core.*;

  public class JavaPythonIntegration {

  public static void main(String[] args) {

  PythonInterpreter interpreter = new PythonInterpreter();

  // 执行简单的Python语句

  interpreter.exec("print('Hello from Python!')");

  // 执行Python脚本文件

  interpreter.execfile("path/to/your/script.py");

  // 调用Python函数

  interpreter.execfile("path/to/your/script.py");

  PyObject pyFunction = interpreter.get("your_function_name");

  PyObject result = pyFunction.__call__(new PyInteger(10), new PyInteger(20));

  System.out.println("Result from Python function: " + result.toString());

  interpreter.close();

  }

  }

  运行

  注意事项:

  Jython不支持所有Python库,特别是那些依赖于C语言扩展的库(如NumPy)。

  确保Python脚本路径正确,并且脚本中没有语法错误。

360截图20250426224640574.png

  方法二:通过Java的Runtime类或ProcessBuilder类调用Python脚本

  这种方法通过启动一个新的操作系统进程来执行Python脚本,适用于需要调用第三方库或执行复杂脚本的场景。

  使用Runtime类:

  编写Java代码调用Python脚本:

  使用Runtime.getRuntime().exec()方法来执行Python脚本。

  示例代码如下:import java.io.BufferedReader;

  import java.io.InputStreamReader;

  public class JavaPythonIntegration {

  public static void main(String[] args) {

  try {

  // 执行Python脚本

  Process process = Runtime.getRuntime().exec("python path/to/your/script.py");

  // 读取Python脚本的输出

  BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));

  String line;

  while ((line = reader.readLine()) != null) {

  System.out.println(line);

  }

  // 等待进程结束

  int exitCode = process.waitFor();

  System.out.println("Exited with error code: " + exitCode);

  } catch (Exception e) {

  e.printStackTrace();

  }

  }

  }

  运行

  使用ProcessBuilder类:

  编写Java代码调用Python脚本:

  使用ProcessBuilder类来创建和管理外部进程。

  示例代码如下:import java.io.BufferedReader;

  import java.io.InputStreamReader;

  public class JavaPythonIntegration {

  public static void main(String[] args) {

  try {

  // 创建ProcessBuilder对象

  ProcessBuilder pb = new ProcessBuilder("python", "path/to/your/script.py");

  pb.redirectErrorStream(true);

  // 启动进程

  Process process = pb.start();

  // 读取Python脚本的输出

  BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));

  String line;

  while ((line = reader.readLine()) != null) {

  System.out.println(line);

  }

  // 等待进程结束

  int exitCode = process.waitFor();

  System.out.println("Exited with error code: " + exitCode);

  } catch (Exception e) {

  e.printStackTrace();

  }

  }

  }

  运行

  注意事项:

  确保系统中已安装Python,并且Python路径已添加到环境变量中。

  处理好进程的输入输出流,避免死锁。

  如果需要向Python脚本传递参数,可以在exec()或ProcessBuilder中添加参数列表。

  在选择调用Python的方法时,应根据具体需求和项目复杂度来决定。Jython适合简单的跨语言编程需求,而通过Runtime或ProcessBuilder调用Python脚本则更适合需要调用第三方库或执行复杂脚本的场景。无论选择哪种方法,都需要确保代码的可维护性和可读性,以适应未来的扩展和维护需求。

 


猜你喜欢