百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

java 执行Python程序的三种实现方式

off999 2024-10-11 14:04 70 浏览 0 评论

在 Java 中执行 Python 程序有多种实现方式,以下是几种常见的方法:

1. 使用 ProcessBuilder

ProcessBuilder 是 Java 提供的一个类,可以用来启动和控制外部进程。以下是一个示例代码,展示了如何使用 ProcessBuilder 执行 Python 脚本:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class ExecutePythonScript {
    public static void main(String[] args) {
        // 创建命令列表
        List<String> command = new ArrayList<>();
        command.add("python");
        command.add("path/to/your/script.py");
        command.add("arg1"); // 可选:传递给 Python 脚本的参数

        // 创建 ProcessBuilder 实例
        ProcessBuilder processBuilder = new ProcessBuilder(command);

        try {
            // 启动进程
            Process process = processBuilder.start();

            // 获取标准输出流
            InputStream inputStream = process.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            String line;
            System.out.println("Standard Output:");
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }

            // 获取标准错误流
            InputStream errorStream = process.getErrorStream();
            BufferedReader errorReader = new BufferedReader(new InputStreamReader(errorStream));
            System.out.println("Error Output:");
            while ((line = errorReader.readLine()) != null) {
                System.out.println(line);
            }

            // 等待进程结束并获取退出值
            int exitCode = process.waitFor();
            System.out.println("Process exit code: " + exitCode);
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中:

- command 列表包含了要执行的命令和参数。

- processBuilder.start() 启动进程。

- 通过 process.getInputStream()process.getErrorStream() 获取标准输出和标准错误流。

- process.waitFor() 等待进程结束并获取退出值。

2. 使用 Jython

Jython 是一个在 Java 平台上实现的 Python 解释器,它允许你在 Java 代码中直接执行 Python 代码。以下是一个简单的示例:

首先,添加 Jython 依赖到你的项目中(如果你使用的是 Maven,可以在 `pom.xml` 中添加以下依赖):

<dependency>
    <groupId>org.python</groupId>
    <artifactId>jython-standalone</artifactId>
    <version>2.7.2</version>
</dependency>

然后,使用 Jython 执行 Python 代码:

import org.python.util.PythonInterpreter;

public class ExecutePythonWithJython {
    public static void main(String[] args) {
        try (PythonInterpreter pyInterp = new PythonInterpreter()) {
            pyInterp.exec("print('Hello from Python!')");
        }
    }
}

在这个示例中:

- PythonInterpreter 是 Jython 提供的一个类,用于执行 Python 代码。

- pyInterp.exec("print('Hello from Python!')") 执行 Python 代码。

3. 使用 Apache Commons Exec

Apache Commons Exec 是一个用于执行外部进程的库,它提供了比 ProcessBuilder 更高级的功能。以下是一个示例:

首先,添加 Apache Commons Exec 依赖到你的项目中(如果你使用的是 Maven,可以在 `pom.xml` 中添加以下依赖):

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-exec</artifactId>
    <version>1.3</version>
</dependency>

然后,使用 Apache Commons Exec 执行 Python 脚本:

import org.apache.commons.exec.CommandLine;
import org.apache.commons.exec.DefaultExecutor;
import org.apache.commons.exec.ExecuteWatchdog;
import org.apache.commons.exec.PumpStreamHandler;

import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class ExecutePythonWithCommonsExec {
    public static void main(String[] args) {
        CommandLine cmdLine = new CommandLine("python");
        cmdLine.addArgument("path/to/your/script.py");
        cmdLine.addArgument("arg1"); // 可选:传递给 Python 脚本的参数

        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        PumpStreamHandler streamHandler = new PumpStreamHandler(outputStream);

        DefaultExecutor executor = new DefaultExecutor();
        executor.setStreamHandler(streamHandler);

        ExecuteWatchdog watchdog = new ExecuteWatchdog(60000); // 设置超时时间
        executor.setWatchdog(watchdog);

        try {
            int exitCode = executor.execute(cmdLine);
            System.out.println("Process exit code: " + exitCode);
            System.out.println("Output: " + outputStream.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中:

- CommandLine 用于构建要执行的命令。

- DefaultExecutor 用于执行命令。

- PumpStreamHandler 用于处理标准输出和标准错误流。

- ExecuteWatchdog 用于设置超时时间。

通过这些方法,你可以在 Java 中执行 Python 程序,并根据需要处理输出和错误信息。


未完待续,喜欢的点个关注 谢谢。

相关推荐

win10一定要创建账户吗(win10需要创建microsoft账户吗)

win10系统安装不需要申请微软账号。如果是在安装win10的过程中,则使用本地账户登录,从安装主要步骤完成之后进入后续设置阶段开始,步骤如下:1、首先就是要输入产品密钥,或者点击左下角“以后再说”。...

win10显示已禁用输入法(w10系统已禁用输入法)

在使用win10的过程中,有时候利用第三方软件过度优化开机启动项目就容易导致win10无法打开输入法问题,这个情况是由于ctfmon程序无法正常启动所致,一般表现在电脑桌面右下角显示已禁用ime的提示...

windows pad(windowspad官方网站入口)

平板电脑安装windows方法如下1、首先,下载并安装U启动PE制作工具,这里要特别注意的是,要下载装机版的。2、点开PE制作工具的主界面,插入U盘,等待U盘被制作工具识别出来后。3、点击归还空间,然...

为什么电脑一开机就死机(为什么电脑一开机就死机重启)

一、软件问题:  1、导致死机的一个重要原因就是病毒程序的入侵。大家都知道,病毒程序是一种会破坏计算机软件系统,并占用极大的系统资源的一种恶意攻击程序,它会给计算机本身的软件造成很大的伤害。死机时的首...

0x0000007a蓝屏解救方法win7

0x0000007A说明是内存或虚拟内存(硬盘)的问题,你可以按顺序尝试如下操作:1、更改虚拟内存页面文件位置:我的电脑→右键→属性→高级→性能设置→高级→虚拟内存更改→取消原来选择的驱动器(默认在C...

系统小说排行榜完本经典之作

超级兑换系统超级修仙超级客栈系统貌似高手在异界重生之修仙系统超级修仙系统异界之兑换成圣(贱圣VS奸神)+超级兑换(火山飞狐)+穿越之无敌兑换(开心小帅)+兑换器修仙(轻舞流芒)+...

手机能修复u盘吗(手机修复u盘工具下载)

1.在手机上可以恢复u盘,当手机SD卡或U盘插入电脑中时,如果提示“文件或目录损坏且无法读取”的信息时,我们首先需要对手机SD卡或U盘进行目录修复操作。插入待修复的U盘,打开“我的电脑”,找到Sd卡...

怎么查电脑显卡的信息(电脑怎么查看显卡信息)

要查看电脑的显卡信息,可以按照以下步骤进行操作:1.使用快捷键Win+R打开“运行”对话框。2.在运行对话框中输入“dxdiag”并点击“确定”按钮,打开“DirectX诊断工具”。3....

电脑上找不到输入法怎么办(电脑中找不到输入法)

如果电脑上不显示输入法,您可以尝试以下解决方法:1.检查输入法设置:首先,您可以检查电脑的输入法设置。在Windows系统中,您可以点击任务栏右下角的输入法图标(一般为字母或语言标志),然后选择“显...

win10系统本地连接在哪里(window10的本地连接在哪)

要找到本地连接,可以按照以下步骤在Windows10系统中进行:1.点击“开始”菜单,然后选择“设置”(齿轮图标)。2.在设置窗口中选择“网络和Internet”选项。3.在“网络和Inter...

win10有32位版本吗(win10还有32位的吗)

64位版本好。32位的操作系统处理数据的能力较慢,支持的内存小,并且只支持基于32位的软件,不能运行64位的软件。64位的操作系统处理数据的能力较快,支持的内存较大,能运行32位的软件,也能运行6...

pdf打印机下载(pdf打印机安装程序下载)
  • pdf打印机下载(pdf打印机安装程序下载)
  • pdf打印机下载(pdf打印机安装程序下载)
  • pdf打印机下载(pdf打印机安装程序下载)
  • pdf打印机下载(pdf打印机安装程序下载)
账号密码大全真的(各种账号密码)

英雄号,是4399官方版本的账号:1973024549密码:123456这是自己的,不想玩了,送给看到的有缘人吧^o^1、默认的机顶盒密码6321,也可以进行更改,方法:首先,通过搜索“中国电信”...

windows server2019(windowsserver2019密钥激活码)

WindowsServer2019那是给服务器用的系统。服务器的作用是计算数据,而不是图像处理。所以WindowsServer2019里面精简了大量有关图形的功能。办公和打游戏是需要图像处理的...

一键还原系统怎么卸载(一键还原系统软件怎么用)

打开控制面板,点击“系统”,再点击“高级系统设置”,再点“高级”标签,再点“启动和故障恢复”里的“设置”,,出来新对话框,把“默认操作系统“选到”WIN10,然后下面的”显示操作系统列表的时间“选到0...

取消回复欢迎 发表评论: