java如何运行Python文件程序

news/2024/9/22 4:19:20/文章来源:https://www.cnblogs.com/zys2019/p/18382967

有时候会遇到在java中启动Python的程序,下面进行说明

package com.zxh.util;import lombok.extern.slf4j.Slf4j;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;/*** python执行器** @Author zxh* @Date 2024/8/27 0027*/
@Slf4j
public class PythonExecution {/*** 运行py文件** @param directoryPath py文件的根路径* @param command       要执行的命令*/public static void execFile(String directoryPath, String command) {try {ProcessBuilder processBuilder = new ProcessBuilder();//切换到py文件的路径并执行命令processBuilder.command("cmd.exe", "/c", "cd /d " + directoryPath + " && " + command);Process process = processBuilder.start();//等待执行完成的后退出状态码,0表示成功,其他是失败int exitCode = process.waitFor();log.info("Command exited with code {}.执行结果:{}", exitCode, exitCode == 0);// 获取 Python 脚本的输出结果InputStream inputStream = process.getInputStream();//指定编码,py默认编码会导致乱码BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream,"gb2312"));String line;Boolean isPrint = false;while ((line = reader.readLine()) != null) {if (!isPrint) {log.info("py执行后返回结果:");}isPrint = true;log.info(line);}Boolean isError = false;// 获取 Python 脚本的错误信息InputStream errorStream = process.getErrorStream();BufferedReader errorReader = new BufferedReader(new InputStreamReader(errorStream));String errorLine;while ((errorLine = errorReader.readLine()) != null) {if (!isError) {log.info("py执行的错误信息:");}isError = true;log.info(errorLine);}} catch (IOException e) {log.error("执行py时出现异常:", e);} catch (InterruptedException e) {Thread.currentThread().interrupt();}}
}

test.py内容如下:

result = "Hello from Python!你好"
print(result)

直接调用,指定py文件的路径和文件名(原因:可能会存在当前运行的py文件和运行的java程序不在同一文件夹下)

    public static void main(String[] args)  {String directoryPath = "D:\\项目\\demo\\springboot-demo\\src\\main\\resources\\py";String command = "python test.py";PythonExecution.execFile(directoryPath, command);}

执行结果

需要注意的是,对于py文件中返回值包含中文,则需要进行编码的设置,否则是乱码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/788544.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

zabbix图形界面的字体问题

现象,zabbix web语言改为中文后 解决过程: 1.去windows下控制面板-字体-复制(楷体-常规)find / -name defines.inc.php cat /usr/share/zabbix/include/defines.inc.php 查看到字体及字体路径 进入字体目录:cd /usr/share/zabbix/assets/fonts 上传新字体 替换字体配置:…

工业和信息化部通报2024年第7批涉嫌侵害用户权益的APP和SDK

​工业和信息化部近日公布了一批存在安全问题的APP和SDK名单,这些应用和软件开发工具包(SDK)因违反相关法律法规,涉及违规收集个人信息、信息窗口乱跳转等问题被通报。此次通报的APP和SDK涉及多个应用领域,包括记账、游戏、实用工具、影视、网络加速、广告服务等。通报中指…

深度解析HarmonyOS SDK实况窗服务源码,Get不同场景下的多种模板

HarmonyOS SDK实况窗服务(Live View Kit)作为一个实时呈现应用服务信息变化的小窗口,遍布于设备的各个使用界面,它的魅力在于将复杂的应用场景信息简洁提炼并实时刷新,在不影响当前其他应用操作的情况下,时刻向用户展示最新的信息动态,用户也可以点击实况窗卡片或胶囊进…

uniapp js 数独小游戏 9*9 数独 2.0

效果图: game.vue <template> <view> <view class="main"> <view class="foot"> <view v-if="!isTip" class="sudoku_area"> <view v-for="(row, index) of rowList" :key=&qu…

2024-08-28:用go语言,给定一个从1开始、长度为n的整数数组nums,定义一个函数greaterCount(arr, val)可以返回数组arr中大于val的元素数量。 按照以下规则进行n次

2024-08-28:用go语言,给定一个从1开始、长度为n的整数数组nums,定义一个函数greaterCount(arr, val)可以返回数组arr中大于val的元素数量。 按照以下规则进行n次操作,将nums中的元素分配到两个数组arr1和arr2中: 1.第一次操作将nums[1]加入arr1。 2.第二次操作将nums[2]加…

WPF 如何利用Blend给Button添加波纹效果

先看一下效果吧:如果不会写动画或者懒得写动画,就直接交给Blend来做吧; 其实Blend操作起来很简单,有点类似于在操作PS,我们只需要设置关键帧,鼠标点来点去就可以了,Blend会自动帮我们生成我们想要的动画效果. 第一步:要创建一个空的WPF项目 第二步:右键我们的项目,在最…

绘制ply模型顶点的法线(通过两点)

import trimesh import matplotlib.pyplot as plt# 读取点云文件 mesh = trimesh.load_mesh(test.ply)# 计算法线 mesh.vertex_normals# 创建一个新的图形窗口 fig = plt.figure() ax = fig.add_subplot(111, projection=3d)# 绘制顶点 ax.scatter(mesh.vertices[:, 0], mesh.v…

HandyControl 初识 第一次正确引入

在 App.xaml配置HandyControl,一个是皮肤资源,一个是主题资源 完整代码: ` <Application.Resources><ResourceDictionary><ResourceDictionary.MergedDictionaries><ResourceDictionary Source="pack://application:,,,/HandyControl;component/Th…

信息熵计算程序[Python+CSV格式数据集]

0 前言为了便于学习决策树信息熵相关知识,笔者编写了一个专门用于计算变量信息熵、条件熵、信息增益、信息增益比的程序,方便提升学习效率。 程序中包含了计算过程的数据和详细信息以及最终计算结果。 编程语言为Python,搭配CSV数据格式使用。1 数据集 1.1 游玩数据集 根据天…

【整理】 【Windows系列】Windows安全日志分析实战:关键事件+详解

参考🔗: https://mp.weixin.qq.com/s?__biz=MzI5MjY4MTMyMQ==&mid=2247485189&idx=1&sn=f97aca178ab188d35e3182bf89ddf4dc&chksm=ec7ce403db0b6d151ee60369468e79229d8d3a264edb2967d7bd2ecdcd69e93af2abfb68dd1c&cur_album_id=3541179802739621890&a…

【ROS教程】ROS文件系统和基础架构

@目录1.工作空间目录1.1 package.xml2.启动节点的方式2.1 一次启动一个2.2 一次启动多个3.ROS常用命令3.1 增3.2 查3.3 执行3.3.1 加载环境变量3.3.2 运行节点3.4 查看计算图4.创建功能包4.1 选择工作目录4.2 创建功能包目录4.3 建立功能包1.工作空间目录WorkSpace --- 自定义的…

沉浸式体验吸尘器产品的3D可视化盛宴

在这个科技日新月异的时代,每一个细微之处都蕴含着创新的火花,而家居清洁作为我们日常生活中不可或缺的一环,也正在经历一场前所未有的变革。大家可以想象一下,无需亲临实体店,只需轻点鼠标或滑动屏幕,一款款精心设计的吸尘器便以3D形态跃然眼前,仿佛触手可及。这不仅仅…