先说下上面问题的原因,上面问题是因为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文件的错误。。