JAVA使用Runtime.getRuntime()執行python指令碼檔案
阿新 • • 發佈:2018-11-26
java呼叫python(含anaconda)
注意:
1、python指令碼必須都用的是絕對路徑(可以拼接)
2、python指令碼呼叫自定義的模組時要將模組路徑新增到環境中。如果用sys.append(模組絕對路徑),要每一個指令碼都要新增專案所在的路徑。
cmd命令列執行: 環境路徑 空格 專案路徑
用Runtime.getRuntime().exec()
public class test_sq { public static void main(String[] args) throws IOException, InterruptedException { Process pr; pr = Runtime.getRuntime().exec("C:\\Users\\shaoqiang\\Anaconda3\\python.exe D:/pycharm_workspace1/program/program1_shop.py"); out.println(pr.waitFor()); } } 前為anaconda環境路徑,後為檔案路徑。 注意: 在寫python檔案時對excel檔案操作要用絕對路徑,否則返回值pr為1,即執行未成功。執行成功返回值為0。可利用返回值確定是否繼續執行下一個程式。 拓展: java呼叫python,python內容視窗顯示操作,寫法如下: pr = Runtime.getRuntime().exec("cmd /k start C:\\Users\\shaoqiang\\Anaconda3\\python.exe D:/pycharm_workspace1/program/program1_shop.py") 在使用 cmd /c 時不會彈出python輸出視窗, 可以使用 cmd /k start 字首以彈出一個新的控制檯視窗並顯示python輸出
例:
#指令碼檔案
import numpy as np
a = np.arange(12).reshape(3,4)
print(a)
#使用Runtime.getRuntime()執行指令碼,並輸出結果 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Demo1 { public static void main(String[] args) { // TODO Auto-generated method stub Process proc; try { proc = Runtime.getRuntime().exec("python D:\\demo1.py");// 執行py檔案 //用輸入輸出流來擷取結果 BufferedReader in = 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(); } } }
---------------------
參考原文:
https://blog.csdn.net/shaoqiangaa/article/details/80951746