由於一些功能用python代碼實現會更加方便(python有那么多實用的庫真的香),所以可以用python實現部分代碼並通過java來調用執行。
python代碼文件 test.py
import time
for i in xrange(1,10):
print("process: " + str(i))
time.sleep(2)
print("Finish.........")
加入time.sleep(2)讓python的輸出有停頓間隔性。主要是為了驗證java執行python代碼的時候是異步執行還是同步執行,說白了就是為了驗證java調用python的時候是不是只是取得一瞬間的輸出,或者驗證當python執行比較慢的時候,java代碼流程是否會等待python代碼執行完成。
java代碼文件 ExecutePy.java
原理就是在命令行中輸入python test.py
來執行python的代碼,並讀取控制台中python文件的輸出。
Java中通過Runtime.getRuntime()
得到當前JVM虛擬機執行的環境。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class ExecutePy
{
public static void main(String[] args) {
try {
String exe = "python";
String command = "/Users/jinchengll/Documents/temp/test.py";
String[] cmdArr = new String[] { exe, command };
Process process = Runtime.getRuntime().exec(cmdArr);
BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while( ( line = in.readLine() ) != null ) {
System.out.println(line);
}
in.close();
int result = process.waitFor();
System.out.println("執行結果:" + result);
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
結果
jinchengll temp $java ExecutePy
process: 1
process: 2
process: 3
process: 4
process: 5
process: 6
process: 7
process: 8
process: 9
Finish.........
執行結果:0
總結
通過以上方法可以使用Java調用python代碼並獲得輸出,但是存在一個問題是Java獲取python的輸出並不是馬上就能獲取到,需要等python代碼全部執行完了,Java才會開始讀取python的輸出並輸出到Java的控制台上。