對於一個數據分析方面的工做者來講,最熟悉的語言無疑就是Python了。對於軟件開發者而言,Java又是極其重要的工具。那麼,一個很天然的問題就是,咱們可以在Java中調用Python代碼嗎?
想要在Java中調用Python代碼,有如下兩個辦法:html
在Java中若是須要調用第三方程序,能夠直接經過Runtime實現,這也是最直接最粗暴的作法,粒度更加粗糙,效率較高,須要安裝Python軟件。而Jython是Python語言在Java平臺的實現,能夠理解爲一個由 Java 語言編寫的 Python 解釋器,所以,不須要安裝Python軟件。它不只提供了Python的庫,同時也提供了全部的Java類,這就使得其有一個巨大的資源庫。Jython能夠直接調用Python程序中的指定函數或者對象方法,粒度更加精細。但遺憾的是,Jython運行速度並不理想。
接下來,咱們將分別介紹以上兩種調用方法。
首先是直接經過Runtime調用Python代碼。先寫個Python代碼文件test_argv.py,它位於D盤中,其完整代碼以下:java
import sys a = sys.argv[1] b = sys.argv[2] print("%s * %s = %s"%(a,b,int(a)*int(b)))
該Python代碼接受兩個命令行參數,而後輸出一個乘法算式。調用的Java代碼以下:python
package javaCode; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Scanner; public class TestPython { public static void main(String[] args) throws Exception { Scanner input = new Scanner(System.in); // 在同一行輸入兩個數字,用空格分開,做爲傳入Python代碼的命令行參數 System.out.println("Enter two integers(e.g. 12 34): "); String integers = input.nextLine(); String[] numbers = integers.split(" "); // 定義傳入Python腳本的命令行參數,將參數放入字符串數組裏 String cmds = String.format("python D://test_argv.py %s %s", numbers[0], numbers[1]); // 執行CMD命令 System.out.println("\nExecuting python script file now."); Process pcs = Runtime.getRuntime().exec(cmds); pcs.waitFor(); // 定義Python腳本的返回值 String result = null; // 獲取CMD的返回流 BufferedInputStream in = new BufferedInputStream(pcs.getInputStream()); // 字符流轉換字節流 BufferedReader br = new BufferedReader(new InputStreamReader(in)); // 這裏也能夠輸出文本日誌 String lineStr = null; while ((lineStr = br.readLine()) != null) { result = lineStr; } // 關閉輸入流 br.close(); in.close(); System.out.println(result); } }
從以上代碼中,能夠發現,咱們往Python代碼中傳入了兩個命令行參數(兩個整數),經過Java提供的Runtime環境讓Python執行程序,最後用Java獲得在CMD或shell中的輸出流並在Java程序輸出,本質上仍是Python在處理計算結果。其輸出以下圖所示:shell
而後咱們將演示如何使用Jython來實現相似上述程序的功能。
Jython的MVN倉庫地址爲http://mvnrepository.com/arti..., API官方網址爲: http://www.jython.org/javadoc/, jar的下載地址爲: http://www.jython.org/downloa... . 下載jython-standalone-2.7.0.jar包,並將其加入到Eclipse的Java Build Path中,以下圖:數組
Java代碼以下:函數
package javaCode; import org.python.util.PythonInterpreter; public class TestPython { public static void main(String args[]) { PythonInterpreter interpreter = new PythonInterpreter(); interpreter.exec("import sys "); interpreter.exec("a = input('Enter a:')"); interpreter.exec("b = input('Enter b:')"); interpreter.exec("print('%s * %s = %s' %(a, b, a*b))"); } }
運行以上程序,結果以下圖:工具
至此,咱們成功地用以上兩種方法在Java中調用了Python代碼。
本次分享到此結束,歡迎你們交流~~ui