在Java工程中调用Python代码

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

Python是一门好用的脚本语言,底层基于C实现,快速且简单。使用python可以说是站在巨人肩膀上编程,使得程序员更专注于业务及逻辑,而不是被人学烂的语言工具。但是团队合作时候,就会有一些多语言编程,然后集成的问题,例如我遇到的Java和Python。为了方便非Python程序员能够使用写好的python程序,需要考虑两个方面: 
- 环境是否可迁移,在没有python环境的机器上如何运行。 
- Java如何实现与python的交互。

环境迁移 
方案一 
(1) 安装python环境,写入path路径 
(2) 保证pip可以正常使用,cmd切换到路径下:c:/Python27/Scripts>pip 
(3) pip install -r requirement.txt 
site-packages里面放的是第三方包。包可以通过import 引入程序中。 因此,需要提前写好requirement.txt文件,包含一堆依赖 
在Java工程中调用Python代码_第1张图片 
方案二 
将python打包成exe,可以在无python环境的windows环境下运行python代码。有两个工具可供使用: 
Py2exe: 
python2.7 对应0.6.9版本的py2exe,需要另外创建setup.py,且不支持win64. 具体见:python打包程序py2exe实战 
PyInstaller: 
推荐使用, 
(1)首先安装:pip install pyinstaller 
(2)开始打包成exe 
- 命令提示符cd 到需要打包的文件的目录 
- 直接在命令提示符中输入pyinstaller -F 文件名.py 注意F要大些,呵呵就这么简单 
- 打包成功后会出现两个文件夹,其中一个就是所需要的exe文件; 
注:若是gui文件可以在输入pyinstaller -F -w文件名.py 其中w是小写,意思就是五命令行窗口,默认的是-c有命令行窗口,当然一般的文件也可以-w,这样命令行窗口就没有了。 
pyinstaller 的其他常用的参数 
- “- -icon=图标路径” 
- “-F 打包成一个exe文件” 
- “-w 使用窗口,无控制台” 
- “-c 使用控制台,无窗口” 
- “-D 创建一个目录,里面包含exe以及其他一些依赖性文件 还有一些可以通过pyinstaller -h 来查看参数” 
例如: 
C:\Users\Desktop\exe>pyinstaller -F c:/helloworld.py 
exe存放地址> pyinstaller -F 目标文件

Java如何实现与python的交互。 
解决:文件读写。Java输出的数据,交给python读取并处理。python输出处理结果到文件,Java读取并进行后续工作。 
Java中运行python脚本的三种方式 
(1) 直接执行Python脚本代码 
引用 org.python包

PythonInterpreter interpreter = new PythonInterpreter();  
interpreter.exec("days=('mod','Tue','Wed','Thu','Fri','Sat','Sun'); ");   ///执行python脚本

(2) 执行python .py文件

PythonInterpreter interpreter = new PythonInterpreter();  
InputStream filepy = new FileInputStream("D:\\demo.py"); 
interpreter.execfile(filepy);  ///执行python py文件
filepy.close();

(3)使用Runtime.getRuntime()执行脚本文件 
这种方式和.net下面调用cmd执行命令的方式类似。如果执行的python脚本有引用第三方包的,建议使用此种方式。使用上面两种方式会报错java ImportError: No module named arcpy。

Process proc = Runtime.getRuntime().exec("python  D:\\demo.py");  
proc.waitFor(); 

转载于:https://my.oschina.net/Skynet01/blog/2050261

你可能感兴趣的:(在Java工程中调用Python代码)