Java之調用Python代碼

  對於一個數據分析方面的工做者來講,最熟悉的語言無疑就是Python了。對於軟件開發者而言,Java又是極其重要的工具。那麼,一個很天然的問題就是,咱們可以在Java中調用Python代碼嗎?
  想要在Java中調用Python代碼,有如下兩個辦法:html

  • 直接經過Runtime進行調用
  • 調用Jython

在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 Build Path中加入jython-standalone-2.7.0.jar

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

相關文章
相關標籤/搜索