摘要:首先是直接通過調用代碼。先寫個代碼文件,它位于盤中,其完整代碼如下該代碼接受兩個命令行參數,然后輸出一個乘法算式。
??對于一個數據分析方面的工作者來說,最熟悉的語言無疑就是Python了。對于軟件開發者而言,Java又是極其重要的工具。那么,一個很自然的問題就是,我們能夠在Java中調用Python代碼嗎?
??想要在Java中調用Python代碼,有以下兩個辦法:
直接通過Runtime進行調用
調用Jython
在Java中如果需要調用第三方程序,可以直接通過Runtime實現,這也是最直接最粗暴的做法,粒度更加粗糙,效率較高,需要安裝Python軟件。而Jython是Python語言在Java平臺的實現,可以理解為一個由 Java 語言編寫的 Python 解釋器,因此,不需要安裝Python軟件。它不僅提供了Python的庫,同時也提供了所有的Java類,這就使得其有一個巨大的資源庫。Jython可以直接調用Python程序中的指定函數或者對象方法,粒度更加精細。但遺憾的是,Jython運行速度并不理想。
??接下來,我們將分別介紹以上兩種調用方法。
??首先是直接通過Runtime調用Python代碼。先寫個Python代碼文件test_argv.py,它位于D盤中,其完整代碼如下:
import sys a = sys.argv[1] b = sys.argv[2] print("%s * %s = %s"%(a,b,int(a)*int(b)))
該Python代碼接受兩個命令行參數,然后輸出一個乘法算式。調用的Java代碼如下:
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(" Executing 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在處理計算結果。其輸出如下圖所示:
??然后我們將演示如何使用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代碼。
??本次分享到此結束,歡迎大家交流~~
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41524.html
摘要:首先是直接通過調用代碼。先寫個代碼文件,它位于盤中,其完整代碼如下該代碼接受兩個命令行參數,然后輸出一個乘法算式。 ??對于一個數據分析方面的工作者來說,最熟悉的語言無疑就是Python了。對于軟件開發者而言,Java又是極其重要的工具。那么,一個很自然的問題就是,我們能夠在Java中調用Python代碼嗎???想要在Java中調用Python代碼,有以下兩個辦法: 直接通過Runt...
摘要:引上下文管理器太極生兩儀,兩儀為陰陽。而最常用的則是,即上下文管理器使用上下文管理器用之后的文件讀寫會變成我們看到用了之后,代碼沒有了創建,也沒有了釋放。實現上下文管理器我們先感性地對進行猜測。現實一個上下文管理器就是這么簡單。 Python有什么好學的這句話可不是反問句,而是問句哦。 主要是煎魚覺得太多的人覺得Python的語法較為簡單,寫出來的代碼只要符合邏輯,不需要太多的學習即可...
摘要:的類行為是的類行為的子集,目前尚不支持優先級線程組,線程無法銷毀停止暫停恢復或中斷。表示繼承創建該線程的當前線程的屬性。重入鎖,同步原語的一種,可由同一線程多次獲取已持有的鎖。 threading在低級的_thread模塊上構建了更高級的線程接口。 threading模塊基于Java線程模型設計。不過Java中鎖和條件變量是每個對象的基本行為,在python中卻是單獨的對象。pytho...
閱讀 2081·2023-04-25 17:57
閱讀 1287·2021-11-24 09:39
閱讀 2487·2019-08-29 16:39
閱讀 3317·2019-08-29 13:44
閱讀 3126·2019-08-29 13:14
閱讀 2323·2019-08-26 11:36
閱讀 3815·2019-08-26 11:00
閱讀 952·2019-08-26 10:14