zoukankan      html  css  js  c++  java
  • 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文件的错误。。

  • 相关阅读:
    FZU 2150 Fire Game
    POJ 3414 Pots
    POJ 3087 Shuffle'm Up
    POJ 3126 Prime Path
    POJ 1426 Find The Multiple
    POJ 3278 Catch That Cow
    字符数组
    HDU 1238 Substing
    欧几里德和扩展欧几里德详解 以及例题CodeForces 7C
    Codeforces 591B Rebranding
  • 原文地址:https://www.cnblogs.com/prader6/p/11016802.html
Copyright © 2011-2022 走看看