java调用python脚本问题(Runtime.getRuntime().exec() )

gouwenct 2018-06-04 06:03:35
os:mac
idle :IntelliJ IDEA CE 2018.01
因为课程设计缘故,我们小组想做用java 调用python的程序
在网上搜到jython,由于我们的python脚本有大量第三方脚本,所以查到用Runtime.getRuntime().exec() 实现python的调用

java程序如下:

package test;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class MyDemo {
public static void main(String[] args) {
try {
System.out.println("start");
String[] args1=new String[]{"python","/Users/gouwenct/3_course_design/src/text/color_line.py"};
Process pr=Runtime.getRuntime().exec(args1);

BufferedReader in = new BufferedReader(new InputStreamReader(
pr.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
in.close();
pr.waitFor();
System.out.println("end");
} catch (Exception e) {
e.printStackTrace();
}}
public void test(){
System.out.println("我的第一个方法C");
}
}


调用下面这个简单python时,可以运行

#import numpy
if __name__ == '__main__':
a= 1
print(a)
print("hello,this is python")

java运行结果如下:


但当调用python 中含有第三方库时,好像Runtime.getRuntime().exec() 这句话就像没执行了一样

import numpy
if __name__ == '__main__':
a= 1
print(a)
print("hello,this is python")

java运行结果如下:


请问是什么原因啊,我按照https://www.cnblogs.com/bethansy/p/7614749.html 这篇做的,按道理说 是应该能调用的啊
难道是IDLE的问题吗?
我在mac终端下javac 可以,
但 java MyDemo时就出现 错误: 找不到或无法加载主类 MyDemo


...全文
3714 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
th3000 2020-06-25
  • 打赏
  • 举报
回复 2
在调用含第三方库的时候,需要指定第三方库的所在 String[] aaa = new String[]{"D:\\Anaconda3\\python.exe", "D:\\Pythonworkspace\\Python_Class\\aaa.py"}; proc = Runtime.getRuntime().exec(aaa);// 执行py文件
qingdujun 2019-08-22
  • 打赏
  • 举报
回复 1
其一,int res = process.waitFor(); 有一个返回值。一般来说,0表示调用成功,1表示调用失败。 其二,对于一般不使用第三方库的程序而言,使用你上面的写法也可以。一旦涉及到第三方库的使用比如numpy,等等,你的方法就不可行了,同时res值会为1,调用失败。 解决方案: 将第一个参数“python”,换成绝对地址即可(比如,“/usr/bin/python3”)
  • 打赏
  • 举报
回复 1
前几天刚好遇到这个问题,不知道能否帮到你,idea调取python脚本需要进行系统环境变量配置和idea运行环境变量配置
陌上行走 2018-09-02
  • 打赏
  • 举报
回复
package test;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class MyDemo {
    public static void main(String[] args) {
        try {
            System.out.println("start");
            String[] args1=new String[]{"python","/Users/gouwenct/3_course_design/src/text/color_line.py"};
            Process pr=Runtime.getRuntime().exec(args1);
 
            BufferedReader in = new BufferedReader(new InputStreamReader(
                    pr.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                System.out.println(line);
            }
            in.close();
            pr.waitFor();
            System.out.println("end");
        } catch (Exception e) {
            e.printStackTrace();
        }}
    public void test(){
        System.out.println("我的第一个方法C");
    }
}
这个原因是因为你调用的python的问题
String[] args1=new String[]{"python","/Users/gouwenct/3_course_design/src/text/color_line.py"};
Process pr=Runtime.getRuntime().exec(args1);
此处python默认调用的是系统的默认python,比如说linux是默认的自带python,如果你想用自己配置的anaconda中的python的话,需要指定相应的路径,如我的是:String[] args1=new String[]{"/home/huan/anaconda2/bin/python","/home/huan/myfile/pythonfile/helloword.py"};
修改后就可以了。
weixin_42917697 2021-07-02
  • 举报
回复
@陌上行走 可以是可以,但是第三方包的问题怎么解决呢
weixin_42917697 2021-07-02
  • 举报
回复
@陌上行走 比如:python文件中import numpy
qq_34621405 2018-06-06
  • 打赏
  • 举报
回复
两个问题,首先我记得如果需要调用python的脚本中包含第三方库时,需要在eclipse中安装python对应调用的模块,你可以百度一下你的java IDE中如何安装python第三方库; 其次,你的第二个问题mac终端下无法找到 MyDemo,不知道你是不是按照这样的方式“建立test包,在test包中New-Class,新建MyDemo类,建好完成后就可以在MyDemo中写代码了”来建立的MyDemo类
gouwenct 2018-06-05
  • 打赏
  • 举报
回复
引用 1 楼 oyljerry 的回复:
估计py第三方库加载失败了。
你好 请问如何在IntelliJ IDEA CE 设置加载第三方库呢
oyljerry 2018-06-04
  • 打赏
  • 举报
回复
估计py第三方库加载失败了。

50,526

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧