springboot中测试python脚本:ProcessBuilder
目录
一.添加Jython依赖
二.使用步骤
1. 创建 ProcessBuilder 实例
2. 设置工作目录(可选)
3. 合并错误流(可选)
4. 启动进程
5. 处理输入输出流
6. 等待进程完成
7.完整案例
三.注意事项
ProcessBuilder是jdk提供的脚本执行工具类,无论是python文件还是shell脚本还是其他的指令,都可以通过此类来执行,我们来看看它是如何调用python脚本的。
ProcessBuilder
是 Java 提供的一个用于创建操作系统进程的类,它使得启动和管理外部进程变得更加简单和灵活。以下是一个详细的教程,帮助你理解如何在 Java 中使用 ProcessBuilder
。
一.添加Jython依赖
<dependency><groupId>org.python</groupId><artifactId>jython-standalone</artifactId><version>2.7.2</version> <!-- 确认版本号是最新的 -->
</dependency>
二.使用步骤
1. 创建 ProcessBuilder 实例
首先,你需要创建一个 ProcessBuilder
的实例,并指定要执行的命令及其参数。命令可以是一个简单的字符串数组,其中第一个元素是命令名称,后续元素是该命令的参数。
List<String> command = Arrays.asList("python3", "path/to/your_script.py", "arg1", "arg2");
ProcessBuilder processBuilder = new ProcessBuilder(command);
2. 设置工作目录(可选)
你可以为这个进程设置一个工作目录,如果未指定,默认的工作目录将是当前Java进程的工作目录。
processBuilder.directory(new File("/path/to/working/directory"));
3. 合并错误流(可选)
默认情况下,标准输出和标准错误是分开的。如果你希望将它们合并到一起处理,可以调用 redirectErrorStream(true)
方法。
processBuilder.redirectErrorStream(true);
4. 启动进程
通过调用 start()
方法来启动进程,并获得一个 Process
对象,你可以使用这个对象与新进程进行交互。
Process process = processBuilder.start();
5. 处理输入输出流
为了从子进程中获取输出或向子进程发送输入,你需要处理 Process
对象的标准输入、输出和错误流。
// 获取子进程的输出流
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream(), StandardCharsets.UTF-8));
String line;
while ((line = reader.readLine()) != null) {System.out.println(line); // 或者做其他处理
}// 如果需要发送数据到子进程的标准输入
OutputStream out = process.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(out, StandardCharsets.UTF-8);
writer.write("Some input data\n");
writer.flush(); // 别忘了刷新输出流
6. 等待进程完成
最后,你可以等待子进程结束,并检查它的退出状态码。
try {int exitCode = process.waitFor();System.out.println("Exit Code: " + exitCode);
} catch (InterruptedException e) {e.printStackTrace();
}
7.完整案例
@PostMapping("/process")public String process(@RequestBody String param) throws Exception {// 获取python文件所在目录地址ProcessBuilder pb = new ProcessBuilder("python", "D:\\DevelopWork\\my-space\\java\\pep7chiao-demos\\exe-py-script\\src\\main\\resources\\script\\spider.py", param);// 解决中文乱码pb.environment().put("PYTHONIOENCODING", "utf-8");// 获取进程的输出流和错误流pb.redirectErrorStream(true);Process process = pb.start();// 读取Python脚本的输出BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));String result = "";String line;while ((line = reader.readLine()) != null) {System.out.println(line);result += line;}BufferedReader errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));String errorResult;while ((errorResult = errorReader.readLine()) != null) {System.out.println(errorResult);}// 等待进程结束并检查退出状态int exitCode = process.waitFor();if (exitCode != 0) {throw new RuntimeException("python脚本执行失败:" + exitCode);}return result;}
三.注意事项
-
字符编码:确保正确处理字符编码,特别是当你处理非ASCII字符时(如中文)。
-
异常处理:对可能发生的异常进行适当的处理,以避免程序崩溃。
-
资源管理:记得关闭所有打开的流(如
BufferedReader
和OutputStreamWriter
),以防止资源泄漏。
通过这些步骤,你应该能够轻松地在你的Java应用中使用 ProcessBuilder
来执行外部命令或脚本,并与之交互。
相关文章:
springboot中测试python脚本:ProcessBuilder
目录 一.添加Jython依赖 二.使用步骤 1. 创建 ProcessBuilder 实例 2. 设置工作目录(可选) 3. 合并错误流(可选) 4. 启动进程 5. 处理输入输出流 6. 等待进程完成 7.完整案例 三.注意事项 ProcessBuilder是jdk提供的脚本…...
Google Chrome下载受限制的解决方案【方法指南】
在国内使用网络时,部分用户在尝试访问Google Chrome官网下载谷歌浏览器时,常常遇到网页无法打开或文件下载失败的情况。这种下载受限制的问题多由网络访问政策或DNS解析异常导致。为了正常获取Google Chrome的最新版安装程序,用户需要通过一些…...
mysql-锁的算法(记录锁、间隙锁、临键锁)
1.行锁的三种算法 有3种行锁算法,分别是: Record Lock:单个行记录上的锁,没有主键,会使用隐式的主键进行锁定Gap Lock:间隙锁,锁定一个范围,但不包含记录本身Next-Key Lock&#x…...
SAP Business One系统标准功能之外的不允许负库存控制
SqlServer版本写法: --在存储过程SBO_SP_TransactionNotification里加上这段代码,记得定义一个全局变量用于接收提醒具体是哪个物料 IF transaction_type IN (A) BEGINIF EXISTS (SELECT 1 FROM OIVL T0INNER JOIN OITW T1 ON T0.ItemCode T1.ItemCode…...
AI与5G的融合:如何实现更快速、更智能的物联网应用?
引言 AI和5G的结合,正在加速物联网(IoT)应用的发展,让万物互联变得更加智能、高效。5G提供超高速率、低时延和海量连接的网络能力,而AI则赋予物联网设备更强的数据分析、预测和自动决策能力。当AI与5G融合,…...
Redis的哨兵
Redis的哨兵 Sentinel 一.哨兵概念1.相关名词解释图 二.主节点恢复方式1.人工恢复主节点故障流程图2.哨兵自动恢复主节点流程 三.使用docker搭建环境1.安装docker-compose2.安装docker3.停止之前的redis服务器4.使用docker获取到redis的镜像5.使用docker-compose进行容器编排创…...
初识Redis · 简单理解Redis
目录 前言: 分布式系统 开源节流 认识Redis 负载均衡 缓存 微服务 前言: 本文只是作为Redis的一篇杂谈,简单理解一下Redis为什么要存在,以及它能做到和它不能做到的事儿,简单提及一下它对应的优势有什么&#…...
Python设计模式-抽象工厂模式
1. 什么是抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种方式来创建一系列相关或相互依赖的对象,而无需指定它们具体的类。这种模式是所有形式的工厂模式中最为抽象和最具一般性的一种。…...
【中检在线-注册安全分析报告】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…...
第16届蓝桥杯单片机模拟试题Ⅲ
试题 代码 sys.h #ifndef __SYS_H__ #define __SYS_H__#include <STC15F2K60S2.H> //sys.c extern unsigned char UI; //界面标志(0湿度界面、1参数界面、2时间界面) extern unsigned char time; //时间间隔(1s~10S) extern bit ssflag; //启动/停止标志…...
软件系统安全设计方案,信息化安全建设方案(Word原件)
1.1 总体设计 1.1.1 设计原则 1.2 物理层安全 1.2.1 机房建设安全 1.2.2 电气安全特性 1.2.3 设备安全 1.2.4 介质安全措施 1.3 网络层安全 1.3.1 网络结构安全 1.3.2 划分子网络 1.3.3 异常流量管理 1.3.4 网络安全审计 1.3.5 网络访问控制 1.3.6 完…...
UE5 尝试接入 C# 脚本方案
最近团结替代 Unity6 的事官宣了,只能唏嘘不已,顺带的也就研究了一下在 UE5 中接入 C# 的方案,也算是提前帮广大 Unity 开发者蹚一下转 UE 的路~ 当前我发现的,维护比较勤快的 UE C# 方案有2个,UnrealCSharp 和 Unrea…...
力扣hot100 81-90记录
81-90(动态规划) leetcodehot100 81: class Solution { public:int climbStairs(int n) {int p 0, q 0, count 1;for(int i 1; i < n; i){p q; q count;count p q;}return count;} };//81class Solution { public:vector<vect…...
深入解析以太坊虚拟机(EVM)架构与状态机特性
以太坊(Ethereum)作为第二代区块链平台,其不仅仅是一部分布式账本,而是一个支持智能合约与去中心化应用(DApps)的全球计算机。其核心架构中,以太坊虚拟机(Ethereum Virtual Machine&…...
MySQL---Ubuntu环境安装
1.首先我们要安装MySQL的安装包(APT 配置包) 这个是适合我的Ubuntu版本的MySQL安装包 下载安装包(MySQL APT 配置包) wget https://dev.mysql.com/get/mysql-apt-config_0.8.17-1_all.deb2.安装 APT 配置包: sudo d…...
Vue 3 中 ref 与 reactive 的对比
Vue 3 中 ref 与 reactive 的对比 Vue 3 中 ref 与 reactive 的对比一、定义和基本使用refreactive 二、响应式原理refreactive 三、适用场景refreactive 四、注意事项refreactive Vue 3 中 ref 与 reactive 的对比 在 Vue 3 中,ref 和 reactive 都是用于创建响应式…...
【数据结构 · 初阶】- 单链表
目录 一.相关指针知识点 二.链表 1.为什么学了顺序表还要学链表 2.优点 三.实现 1.链表的打印 —— 理解链表结构 (2) 物理结构图 2.链表的尾插 —— 入门 错误写法:tail ! NULL 总结: 正确代码物理图解: (2) 尾插整体代码 (思考…...
【前端】【React】useCallback的作用与使用场景总结
一、useCallback 的作用与使用场景总结 useCallback 是 React 提供的一个 Hook,用于缓存函数的引用,避免因为组件重新渲染而导致函数地址发生变化。它返回一个记忆(memoized)后的回调函数,只有当依赖项发生变化时才会…...
什么是 React Router?如何使用?
React Router 详解 1. 引言 在现代 web 开发中,单页面应用(SPA)越来越流行,React 是构建 SPA 的热门库之一。React Router 是一个标准的路由库,专为 React 应用设计,允许开发者在应用中实现动态路由和 UR…...
jQuery 插件
在现代Web开发中,jQuery以其简洁的语法和强大的功能成为了前端开发者们喜爱的工具之一。为了进一步扩展jQuery的功能,社区贡献了大量的插件,使得开发者能够更加高效地实现各种复杂的交互效果和功能。本文将介绍什么是jQuery插件、如何编写自己…...
未来杭州:科技与茶香交织的生态诗篇
故事背景 故事发生在中国浙江杭州,融合智能科技与传统茶文化,描绘未来城市中人与自然共生的诗意画卷。通过六个充满未来感的生态场景,展现科技如何重塑龙井茶园、古运河、西湖等经典地标,编织出一曲科技与人文共鸣的生态交响诗。 …...
微服务多模块构建feign项目过程与一些报错(2025详细版)
目录 1.eureka-server的注意事项 2.eureka-feign的注意事项 3.多模块构建feign项目过程 3.1创建父项目 3.2创建子项目eureka-server 3.3创建子项目eureka-provider 3.4创建子项目eureka-feign 3.5运行 给个点赞谢谢 1.eureka-server的注意事项 eureka-server的yml文件…...
AWS云安全实践:基于CISA关键措施的检测与实施指南
1. 引言 随着越来越多的组织将其基础设施迁移到云端,确保AWS环境的安全变得至关重要。美国网络安全与基础设施安全局(CISA)提出的关键措施为我们提供了一个可靠的框架。本文将探讨如何在AWS环境中实施这些措施,特别关注检测类别和可实施的关键措施。 2. AWS云安全中的CISA关…...
超越肉眼所见:一种利用视网膜光学相干断层扫描血管成像(OCTA)图像进行早期痴呆检测的关联模型|文献速递-深度学习医疗AI最新文献
Title 题目 Beyond the eye: A relational model for early dementia detection using retinal OCTA images 超越肉眼所见:一种利用视网膜光学相干断层扫描血管成像(OCTA)图像进行早期痴呆检测的关联模型 01 文献速递介绍 阿尔茨海默病&…...
终端使用python出现segmentation fault (core dumped)的一种解法
有时候在终端输入python,希望交互式运行命令或者通过pdb调试,但是出现如下错误: [1] 7476 segmentation fault (core dumped) python 但是单独运行python xxx.py 或者 python -c "xxx" 又是可以的! 经过与AI大模…...
分布式id生成算法(雪花算法 VS 步长id生成)
分布式ID生成方案详解:雪花算法 vs 步长ID 一、核心需求 全局唯一性:集群中绝不重复有序性:有利于数据库索引性能高可用:每秒至少生成数万ID低延迟:生成耗时<1ms二、雪花算法(Snowflake) 1. 数据结构(64位) 0 | 0000000000 0000000000 0000000000 0000000000 0 |…...
h265为什么没有大范围应用
H.265(也称为 HEVC,High Efficiency Video Coding)是一种视频压缩标准,旨在提供比 H.264(AVC)更高的压缩效率。然而,尽管 H.265 在技术上具有许多优势,但其大范围应用受到了以下几个…...
Linux图形化界面
一、Linux图形化界面 桌面对于Linux系统来说,只是一个应用程序,所以是可以移植的。 Linaro公司针对于半导体厂商推出的芯片,开发了ARM开发工具、Linux内核以及Linux发行版(包括Android及Ubuntu)。 所以无需自己移植&am…...
LangChain-检索系统 (Retrieval)
检索系统 (Retrieval) 检索系统是LangChain的核心组件之一,它提供了从各种数据源获取相关信息的能力,是构建知识增强型应用的基础。本文档详细介绍LangChain检索系统的组件、工作原理和最佳实践。 概述 检索系统解决了大型语言模型知识有限和过时的问…...
【Linux】进程概念
目录 一、进程概念 (一)什么是进程 (二)描述进程-PCB 二、fork创建进程 (一)bash概念 (二)如何创建子进程 一、进程概念 (一)什么是进程 结论&#x…...
【JavaScript】十七、事件委托(冒泡阶段的利用)
文章目录 1、事件委托2、tab栏切换案例:使用事件委托优化3、阻止元素默认行为 1、事件委托 以送快递为例,某班有20名同学,每人有一个快递,快递员可以一个个送,需要送40次,很繁琐,换个方式&…...
Android InstalldNativeService::getAppSize源码分析
InstalldNativeService::getAppSize 是 Android 系统中用于计算应用程序存储空间的核心方法,其逻辑可分为以下几个关键模块(结合代码和上下文分析): 一、基础校验与初始化 1. 权限校验 通过 ENFORCE_UID(AID_SYSTEM) 确…...
微信小程序跳
/** * 画布文本换行绘制 * canvasContext 画布实例 * text 要写入的文本 * x 初始x轴位置 * y 初始y轴位置 * ySpacing 换行后,每行直接的间隔 * maxWidth 此文本写入画布的最大宽度,超过此宽度就换行 * color 文本颜色 * size 文本字体大小 * align 文本…...
openlayers入门01 -- 环境配置和初始化地图
openlayers入门 openlayers开发环境配置 1.下载VSCode 官网地址:https://code.visualstudio.com/ 点击Download for Windows 2.安装汉化插件和openlayers插件 搜索chinese,下载Chinese (Simplified) (简体中文) Language Pack 更改语言并重启 搜…...
window实现多jdk共存、便捷切换
背景 如今大模型技术流行,想要跟上发展就也得学一学,比如Spring-AI等框架,但这些AI相关的框架对jdk版本都有要求,一般都要不低于17。 而在企业开发中,很多时候还使用着jdk8,如何重新安装17,则需…...
常见的 set 选项与空变量检查
在编写 Bash 脚本时,使用 set 命令中的一些选项可以帮助我们在脚本执行过程中及时捕获错误和潜在问题,避免脚本在出错时继续执行,提高脚本的可靠性和健壮性。 set -e:遇到错误就停 set -e 的作用是:一旦脚本中的某个…...
JS 创建对象方法
创建对象的三种方法 3 通过构造函数 自定义构造函数 构造函数 快速定义多个对象 自定义构造函数...
IMX6ULL2025年最新部署方案:最新的UBootLinux和Rootfs部署正点原子Alpha开发板指南
正点原子Alpha IMX6ULL开发板2025年最新部署方案:基于Ubuntu24.04平台开发,部署最新的UBoot/Linux和BusyBox Rootfs部署指南 前言 笔者实在绷不住比较旧的方案了,广义流行的方案是使用2016年发布的Uboot来引导Linux4.1.15,配…...
threeJs实现裸眼3D小狗
一、实现效果 使用threeJs实现裸眼3D小狗,效果如下,其实如果将小狗换成建模小狗,效果更好,这个是模拟了一只小狗。 二、实现代码 代码如下: <!DOCTYPE html> <html> <head><title>星空小狗…...
ZYNQ笔记(二):MIO 、EMIO
版本:Vivado2020.2(Vitis) 任务:使用GPIO MIO 和 EMIO 实现按键 KEY 控制 LED( 两个PL端LED、两个PS端KEY) 目录 一、MIO 、EMIO 介绍 二、硬件设计 三、软件设计 四、效果 一、MIO 、EMIO 介绍 …...
Cygwin编译安装Acise
本文记录Windows下使用Cygwin编译安装Acise的流程。 零、环境 操作系统Windows11Visual Studio CodeVisual Studio Code 1.92.0Cygwin 一、工具及依赖 1.1 Visual Studio Code 下载并安装Visual Studio Code, 同时安装以下插件, Task Explorer Output Colorizer …...
ubuntu22.04 安装-ODBC驱动-SQLserver
1.ISO下载 中科大 Index of /ubuntu-releases/http://mirrors.ustc.edu.cn/ubuntu-releases/ 2.VMware Workstation创建虚拟机 3.更换清华源或者中科大的源 Ubuntu 24.04更换清华源_哔哩哔哩_bilibili 中科大镜像源: Ubuntu - USTC Mirror Help 清华源 ubuntu | 镜…...
[数据结构]Trie字典树
GPT的介绍 🧠 一句话总结: 字典树是一种专门用来存很多字符串的“超级前缀树”,查找某个字符串或前缀的时候,特别快! ✍️ 举个生活例子(类比): 你想做一个词典(Dictio…...
【网络安全】Linux 命令大全
未经许可,不得转载。 文章目录 前言正文文件管理文档编辑文件传输磁盘管理磁盘维护网络通讯系统管理系统设置备份压缩设备管理其它命令前言 在网络安全工作中,熟练掌握 Linux 系统中的常用命令对于日常运维、日志分析和安全排查等任务至关重要。 以下是常用命令的整理汇总,…...
Xcode警报“Ignoring duplicate libraries: ‘-lc++’” 警报
目录 前言 一、问题出现的原因 二、解决步骤 1. 检查构建设置中的链接器标志 2. 检查依赖中的重复库 3. 清除派生数据: 4. 检查冲突的 C 库 5. 更新 CocoaPods: 前言 有时候我们会看到Xcode警报:Ignoring duplicate libraries: ‘-lc…...
WebStorm中使用live-server插件
文章目录 1. 前提条件1.1 已安装Node1.1.1 淘宝的镜像1.2 安装live-server1.3 安装WebStorm2. Windows配置hosts3. WebStorm配置live-server3.1 WebStorm创建3.2 启动 live-server1. 前提条件 1.1 已安装Node Windows PowerShell 版权所有(C) Microsoft Corporation。保留所…...
Python 中使用单例模式
有这么一种场景,Web服务中有一个全局资源池,在需要使用的地方就自然而言引用该全局资源池即可,此时可以将该资源池以单例模式实现。随后,需要为某一特殊业务场景专门准备一个全局资源池,于是额外复制一份代码新建了一个…...
【基于LangChain的千问大模型工具调用】 Function CallingTool Calling简易示例
目录 示例代码 运行结果 功能:根据用户输入自动选择数学计算/天气查询工具处理 "用户输入 → 意图分析 → 工具调用 → 结果返回" 库名解析:【langchain库名解析】-CSDN博客 示例代码 # 模块1:依赖导入 from langc…...
银河麒麟服务器操作系统 V10 SP1 中玩转firewalld防火墙
Hey小伙伴们~👋 今天来聊聊怎么在银河麒麟服务器操作系统 V10 SP1 中玩转firewalld防火墙!🛡️ 这个强大的工具能帮你动态管理防火墙规则,还支持区域概念,让你的网络流量控制更灵活!🎉 &#x…...
信创服务器网络更稳了!链路聚合Bonding实战
原文链接:信创服务器网络更稳了!链路聚合Bonding实战 Hello,大家好啊!今天给大家带来一篇信创服务器操作系统上链路聚合(Bonding)配置实战的文章。链路聚合可以让两块网卡协同工作,提高服务器网…...