一 通过Runtime执行
通过Runtime.getRuntime()方法获得当前java运行环境,再将python脚本传入当前平台的Python环境执行该脚本.
Python脚本程序.c:/userTest/Test.py
print("wanmait"); java代码:
String str = "python c:/userTest/Test.py";
try {
Process process = Runtime.getRuntime().exec(str);
//获得当前java运行环境
InputStream inputStream = process.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
//创建字符输入缓冲流
String data = bufferedReader.readLine();
//获得脚本运行输出的信息
System.out.println(data);
process.waitFor();
bufferedReader.close();
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}运行结果:

二 通过jython执行
下载jython库
https://www.jython.org/download


1 java不向Python传递实参,也不接收Python的返回值
Python程序.c:/userTest/Test.py
print("wanmait");java程序:
PythonInterpreter pythonInterpreter = new PythonInterpreter();
pythonInterpreter.execfile("c:/userTest/Test.py");
//利用Python解析器解析Python程序
pythonInterpreter.close();执行结果:

2 java向Python方法传递实参,并接收返回值
Python程序,c:/userTest/Test.py
def add(arg1,arg2): return arg1+arg2;
java程序:
PythonInterpreter pythonInterpreter = new PythonInterpreter();
pythonInterpreter.execfile("c:/userTest/Test.py");
//利用Python解析器解析Python程序 加载Python文件
PyFunction pyFunctionAdd = pythonInterpreter.get("add", PyFunction.class);
//获得名称是add的Python方法
PyObject pyObject = pyFunctionAdd.__call__(Py.newInteger(2),Py.newInteger(3));
//执行add方法 pyOnject接收返回值 Py.newInteger()是PyInteger对象作为实参
System.out.println(pyObject);
pythonInterpreter.close();程序执行结果:

3 java实例化Python类,并调用方法
Python程序,c:/userTest/Test.py
class Test: def add(self,arg1,arg2): return arg1+arg2;
Test类,add方法
Java程序
PythonInterpreter pythonInterpreter = new PythonInterpreter();
pythonInterpreter.execfile("c:/userTest/Test.py");
//利用Python解析器解析Python程序 加载Python文件
pythonInterpreter.exec("test=Test()" );
//实例化Pyhton的Test类 test是对象名 Test类名
PyObject pyObjectTest = pythonInterpreter.get("test");
//获得实例test
PyObject[] args = {Py.newInteger(2),Py.newInteger(3)};
PyObject pyObject = pyObjectTest.invoke("add",args);
//通过test对象调用add方法 PyObject数组作为add方法的实参
//pyObject接收add方法的返回值
System.out.println(pyObject);
pythonInterpreter.close();执行结果:


0条评论
点击登录参与评论