Java项目调用Python脚本(基于idea)

前期准备

1.首先需要在本地环境中安装配置python环境

Python(含PyCharm及配置)下载安装以及简单使用(Idea)

博主本次使用python版本为py3.7.3

2.idea安装python插件

位置:File->Settings->Plugins->python->安装后重启即可

3.引入jython依赖

xml 复制代码
<!--python-->
<dependency>
   <groupId>org.python</groupId>
   <artifactId>jython-standalone</artifactId>
   <version>2.7.0</version>
</dependency>

编写Java代码

1.方式1:

java 复制代码
String polygon1="yoursParam";
        try {
            // 设置Python脚本路径和参数
            String pythonScriptPath = yours.py";
            // 构建命令
            String command = "python " + pythonScriptPath + " " + polygon1;

            try {
                // 执行命令
                Process process = Runtime.getRuntime().exec(command);

                // 读取脚本输出
                BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
                String line;
                while ((line = reader.readLine()) != null) {
                    System.out.println(line);
                }

                // 等待脚本执行完毕
                process.waitFor();

                reader.close();
            } catch (IOException | InterruptedException e) {
                e.printStackTrace();
            }

2.方式2:

java 复制代码
try {
            // 创建命令列表
            List<String> command = new ArrayList<>();
            command.add("python");
            command.add(yoursUrl);
            command.add(yoursParam);
            // 创建进程生成器并执行命令
            ProcessBuilder pb = new ProcessBuilder(command);
            Process process = pb.start();
            // 读取脚本输出
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String output;
            while ((output = reader.readLine()) != null) {
                System.out.println(output );
            }
            // 等待脚本执行完毕
            process.waitFor();
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }

两种方式区别

参数的形式:

1.Runtime.getRuntime().exec(command) 接受一个字符串形式的命令,例如 "python your_script.py".

2.ProcessBuilder 接受一个命令的字符串列表,例如 {"python", "your_script.py"}. 使用列表形式可以更灵活地传递参数和配置。
管理进程的能力:

1.Runtime.getRuntime().exec(command) 返回一个 Process 对象,但对于该进程的控制和管理能力有限。

2.ProcessBuilder 返回一个 ProcessBuilder 对象,该对象可以进行更高级的进程控制,例如重定向输入输出流、设置环境变量、设置工作目录等。
子进程输出的处理:

1.Runtime.getRuntime().exec(command) 需要手动处理子进程的输入流和输出流,否则可能会导致进程阻塞或数据丢失。

2.ProcessBuilder 在调用 start() 方法后,可以通过 Process 对象的 getInputStream()、getOutputStream() 和 getErrorStream() 方法来获取子进程的标准输入、输出和错误输出流。

python脚本此处不再展示 可根据自己情况传值调用即可 可通过文件方式传值 py处用pandas库中方法读取xlsx或者txt等都可自行选择 如若直接传值可用Processbuilder 命令行获取参数即可 py对应方法为sys.argv 基于sys库

相关推荐
瑞雪兆丰年兮2 分钟前
JavaWeb-day10-SpringBootWeb案例
java·开发语言·javaweb·web
reasonsummer7 分钟前
【教学类-150-03】20261108蝴蝶连连看html(一页2个版面、3个版面)
python·html
Rain的Java大神之路18 分钟前
你背的Spring答案,全是5.x时代的:7.0.8源码一翻,80%的博客都过时了
java·后端·面试
用户0190275816120 分钟前
用 Polars 快速分析 A 股 K 线:比 pandas 更快的列式处理
python
用户03321266636728 分钟前
使用 Python 轻松加密或解密 Excel 文档
python·excel
这个昵称不容易1 小时前
考试报名系统的设计与实现(SpringBoot + MySQL + Vue 三角色平台)
java·springboot·毕设
Adellle1 小时前
设计模式指南 (Java 版) ㊁
java·开发语言·设计模式
CyrusYiVPP1 小时前
手写 MCP Server:给问答机器人接上本地文件工具,Python 实战第 13 期
人工智能·python
特立独行的猫A2 小时前
cj-tauri:用仓颉写桌面与鸿蒙 PC 应用
java·后端·python
Lonely丶墨轩2 小时前
从一个 404 到负数 ID:第三方接口开发中的几次排错
java