java 通过runtime 调用python 不显示python运行内容的bug
先说下上面问题的原因,上面问题是因为python中用到了第三方的类库,你的电脑上没有那个类库,所以程序没有运行,在控制台也就看不到输出。只要导入那个类库就好。。。
python 导入类库,可以单独下载那个类库安装,也可以直接下载 Anaconda (这里面包含了python numpy pandas)不过比较大。
不过我,不是用的上面的两种方式,我是在pycharm 中打开的python程序,pycharm提示要不要自动下载类库(类似于ideal 中写java 代码的自动导包),我选择导入。(简单粗暴)
pycharm 的安装:https://blog.csdn.net/asd343442/article/details/84103444
最近公司要用到java调用python。
通过百度了解到java 调用python有 Runtime() 和Jython 两种方法。 runtime对于简单的程序可以直接使用,也不用导包什么的。
Jython是python在java语言平台的实现。我们平时使用的python其实是Cython 是python 在C语言的实现。 python只是语言规范,执行需要C JAVA 等语言去执行。
Jython的使用,需要安装Jython的环境和导入Jython导包。
参考文章 :https://www.cnblogs.com/nuccch/p/8435693.html
https://blog.csdn.net/it_xiao_bai/article/details/79074988
runtime java调用python参考代码:
public class CallPy { public static void main(String[] args) throws IOException, InterruptedException { // TODO Auto-generated method stub int month = 5; Process proc; String lastLine = null; try { String[] strings = {"python", "E:\\devTool\\Pyproject\\demo\\second.py"}; String[] strings2 = {"E:\\devTool\\python\\python.exe", "D:\\add.py"}; // 执行py文件\\ proc = Runtime.getRuntime().exec(strings); //用输入输出流来截取结果 BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream())); String content = null;while (true){ lastLine = content; if ((content = in.readLine()) == null){ System.out.println(lastLine); break; } } in.close(); proc.waitFor(); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); }
String substring = lastLine.substring(1, lastLine.length() - 1);
String[] split = substring.split(" ");
第一个坑: 上面这段代码,黄色部分是取出python输出的最后一行的内容。
上面靛蓝色的部分,上面部分是写的2个python运行文件的地址,下面的是指的是对输出的字符串,切割空格得到数组。因为我的电脑上有多个python运行环境(自己安装了一个python,安装了jython),如果不指定python.exe的绝对路径,在下面字符串按照空格切割解得到的数组,中间会夹杂着 空字符串,解决办法是,把 split(“ ”)引号中输入2个空格。
第二个坑: 电脑上如果没有python的环境,会报无法加载python文件的错误。。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)