当前位置: 首页 > news >正文

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

前期准备

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

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

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

2.idea安装python插件

位置:File->Settings->Plugins->python->安装后重启即可
在这里插入图片描述

3.引入jython依赖

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

编写Java代码

1.方式1:

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:

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库

http://www.lryc.cn/news/195086.html

相关文章:

  • 前端 JS 经典:i,i++,++i区别
  • EF Core 7.0 新特性之批量修改
  • Vue_Bug error0308010Cdigital envelope routinesunsupported
  • 中科院提出“思维传播”,极大增强ChatGPT等模型复杂推理能力
  • ubuntu20.04安装opencv 3.2.0 报错
  • KubeVela交付
  • 【SpringCloud-10】SCA-nacos
  • 卡顿分析与布局优化
  • 【Vivado HLS Bug】Ubuntu环境下Vivado HLS导出IP报错:HLS ERROR: [IMPL 213-28]
  • 2022最新版-李宏毅机器学习深度学习课程-P14 批次(batch)与动量(momentum)
  • 谜题(Puzzle, ACM/ICPC World Finals 1993, UVa227)rust解法
  • acwing算法基础之数据结构--双链表
  • 将中文名格式化输出为英文名
  • 设计模式_迭代器模式
  • 【数据结构】:栈的实现
  • 微前端一:技术选型
  • FPGA project : flash_continue_write
  • 论文阅读:Rethinking Range View Representation for LiDAR Segmentation
  • 本地配置免费的https咋做?
  • 微信小程序框架---详细教程
  • 【LeetCode刷题(数组and排序)】:存在重复元素
  • 半导体产业链解析:晶圆厂、无晶圆厂与代工厂的比较与作用
  • Apipost一键压测已支持导入CSV文件
  • RabbitMQ的5种模式——再探RabbitMQ的模式,简单、工作,发布订阅(广播),路由、主题 页面分析
  • 初识华为云数据库GaussDB for openGauss
  • 深圳寄包裹到德国
  • 系统架构师备考倒计时22天(每日知识点)Redis篇
  • 现有库存(on-hand inventory),库存水平(inventory level),库存位置(inventory position)
  • 智慧空开让用电更安全、管理更智能——电脑APP远程控制开合闸
  • PyTorch 中张量运算广播