java调用python项目实战_java调用python程序

2020-12-30

在做项目的时候,经常会碰到这个问题,主要程序是用java写的,有些功能使用python写的,整个项目需要把java代码和python代码进行整合,在一个项目里面运行,这就涉及到java调用python的问题。

java调用python程序有几种思路:需要先搭建好 java 及 python 的编译执行环境。

1. 一个解决思路是在java项目中引入jython,然后使用python解释器运行jython代码

2. 在java程序中直接调用python程序,这样无论python程序引入什么样的库(模块),只要程序可以直接通过python xxx.py运行,则在Java程序中也能运行。下面重点介绍在Java中直接调用python程序的方法。java通过Runtime类调用python命令执行。

3. 通过python发布网址,java请求的方式调用。会占用网络资源。

4. 可能还有其他方法

1. 一个解决思路是在java项目中引入jython

然后使用python解释器运行jython代码

2. 在java程序中直接调用python程序

这样无论python程序引入什么样的库(模块),只要程序可以直接通过python xxx.py运行,则在Java程序中也能运行。下面重点介绍在Java中直接调用python程序的方法。

2.1 java中的核心代码,Runtime.getRuntime().exec(),如果python的入口函数不需要参数的话,可以直接将调用py文件的字符写入,示例

Runtime.getRuntime().exec(“python”,” D:\\pyworkspace\\main.py”)

2.2 需要注意的一些问题,要保证在命令行模式下,键入命令

python D:/pyworkspace/main.py

程序可以正常运行。也就是要保证有一个配置好的python环境。这个示例程序比较简单,如果是一个比较复杂的python项目,可能涉及到的模块比较多,用到的库也很多,需要将python环境配置完整,先在命令行下运行,无误后再在java程序中调用。

2.3 示例

1)我们要调用的python代码:

importsysdefmain(abc):print(abc)if __name__ == '__main__':for i in range(1, len(sys.argv)):

strs=sys.argv[i]

main(strs)

程序目录名称为D:/pyworkspace/main.py,函数main有参数,参数通过sys传入,也就是在java中定义好参数,然后通过sys,将参数传给main函数,把参数打印出来。

2)Java程序代码

importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;

publicclassMain {

public static void main(String[] args) {// TODO Auto-generated method stub

Process proc;try{

String[] args1= new String[] { "python", "D:\\pyworkspace\\main.py", "hello,test java and python"};

proc=Runtime.getRuntime().exec(args1);//用输入输出流来截取结果

BufferedReaderin =new BufferedReader(new InputStreamReader(proc.getInputStream()));

String line=null;while ((line = in.readLine()) !=null) {

System.out.println(line);

}in.close();

proc.waitFor();

} catch (IOException e) {

e.printStackTrace();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

可以看到核心代码就是

String[] args1 = new String[] { "python", "D:\\pyworkspace\\main.py", "hello,test java and python"};

proc=Runtime.getRuntime().exec(args1);

Runtime.getRuntime().exec()的参数是一个字符串数组,相当于执行

python D:/pyworkspace/main.py,

往main.py中传递参数"hello,test java and python"。

3)运行结果

4.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值