1. 程式人生 > >JAVA使用Runtime.getRuntime()執行python指令碼檔案

JAVA使用Runtime.getRuntime()執行python指令碼檔案

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 

http://blog.csdn.net/it_xiao_bai/article/details/79074988