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

扫描二维码关注公众号,回复: 6452580 查看本文章

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文件的错误。。

猜你喜欢

转载自www.cnblogs.com/prader6/p/11016802.html