第一種:通過runtime
Runtime runtime = Runtime.getRuntime();
try {
Process process = runtime.exec("python3 /home/liudong/Documents/BPANN/test.py");
}catch (IOException e) {
e.printStackTrace();
}
第二種:通過jython(不傳遞參數(shù),不依賴第三方模塊)
PythonInterpreter interpreter =new PythonInterpreter();
? ? ? ? interpreter.exec("print('hello')");//執(zhí)行Python代碼
? ? ? ? interpreter.execfile("/home/liudong/Documents/BPANN/test.py");//執(zhí)行python文件
第三種:調(diào)用需要傳入?yún)?shù)的Python文件
????????PythonInterpreter interpreter =new PythonInterpreter();
? ? ? ? interpreter.execfile("/home/liudong/Documents/BPANN/test.py");//要執(zhí)行python文件
? ? ? ? PyFunction function = interpreter.get("aa", PyFunction.class);//得到Python文件中的函數(shù)
? ? ? ? //new PyString()代表傳入的參數(shù)
? ? ? ? PyObject pyObject = function.__call__(new PyString("jiajiajaijai"), new PyString("ddddddd"));
? ? ? ? System.out.println("answer:: " + pyObject.toString());
對應的python文件為:
????def aa(name, sex):
????????print("name: " + name)
????????print("sex: " + sex)
????????return name + sex
第四種:如何處理依賴了第三方模塊的Python文件
本地文件下載相應的包,否則會一直報沒有名為什么的模塊。
通過命令行執(zhí)行相應的命令(可以傳遞參數(shù)),可以通過輸入流獲取相應的結(jié)果,從而進行下一步操作。
模板代碼如下:
Runtime runtime = Runtime.getRuntime();
try {
Process process = runtime.exec("python3.5 /home/liudong/PycharmProjects/bpann/webBPANN_interface.py");
? ? InputStream inputStream = process.getInputStream();
? ? BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(inputStream));
? ? String line;
? ? StringBuilder stringBuilder =new StringBuilder();
? ? while ((line = bufferedReader.readLine()) !=null){
System.out.println(line);
? ? ? ? stringBuilder.append(line);
? ? }
System.out.println(stringBuilder.toString());
? ? System.out.println(process.waitFor());
}catch (Exception e) {
e.printStackTrace();
}