使用Java執行python代碼並得到結果


由於一些功能用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的控制台上。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM