溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

java調(diào)用python腳本方式有哪些

發(fā)布時(shí)間:2020-08-14 11:34:16 來(lái)源:億速云 閱讀:303 作者:小新 欄目:編程語(yǔ)言

小編給大家分享一下java調(diào)用python腳本方式有哪些,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

常見(jiàn)的java調(diào)用python腳本方式有兩種,下面給大家介紹一下:

·通過(guò)Jython.jar提供的類庫(kù)實(shí)現(xiàn)

·通過(guò)Runtime.getRuntime()開啟進(jìn)程來(lái)執(zhí)行腳本文件

python學(xué)習(xí)網(wǎng),大量的免費(fèi)python視頻教程,歡迎在線學(xué)習(xí)!

這兩種方法我都嘗試過(guò),個(gè)人推薦第二種方法,因?yàn)镻ython有時(shí)需要用到第三方庫(kù),比如requests,而Jython不支持。所以本地安裝Python環(huán)境并且安裝第三庫(kù)再用Java調(diào)用是最好的方法。

下面通過(guò)兩個(gè)小例子,分別是不帶參數(shù)和帶參數(shù)的,展示如何使用Java調(diào)用Python腳本:

Python代碼:

def hello():
    print('Hello,Python')
 
if __name__ == '__main__':
  hello()

Java代碼:

import java.io.BufferedReader;
import java.io.InputStreamReader;
 
public class HelloPython {
  public static void main(String[] args) {
    String[] arguments = new String[] {"python", "E://workspace/hello.py"};
        try {
            Process process = Runtime.getRuntime().exec(arguments);
            BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream(),
            "GBK"));
            String line = null;
          while ((line = in.readLine()) != null) {  
              System.out.println(line);  
          }  
          in.close();
          //java代碼中的process.waitFor()返回值為0表示我們調(diào)用python腳本成功,
            //返回值為1表示調(diào)用python腳本失敗,這和我們通常意義上見(jiàn)到的0與1定義正好相反
          int re = process.waitFor();  
          System.out.println(re);
        } catch (Exception e) {
            e.printStackTrace();
        }  
  }
}

其中說(shuō)明一點(diǎn),BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream(),"GBK"));這段代碼中的GBK是為了防止Python輸出中文時(shí)亂碼加的。

運(yùn)行結(jié)果:

java調(diào)用python腳本方式有哪些

接下來(lái)是帶參數(shù)的,Python代碼:

import sys
 
def hello(name,age):
  print('name:'+name)
  print('age:'+age)
 
if __name__ == '__main__':
  hello(sys.argv[1], sys.argv[2])

Java代碼:

import java.io.BufferedReader;
import java.io.InputStreamReader;
 
public class HelloPython {
  public static void main(String[] args) {
    String[] arguments = new String[] {"python", "E://workspace/hello.py","lei","23"};
        try {
            Process process = Runtime.getRuntime().exec(arguments);
            BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream(),
            "GBK"));
            String line = null;
          while ((line = in.readLine()) != null) {  
              System.out.println(line);  
          }  
          in.close();
          //java代碼中的process.waitFor()返回值為0表示我們調(diào)用python腳本成功,
            //返回值為1表示調(diào)用python腳本失敗,這和我們通常意義上見(jiàn)到的0與1定義正好相反
          int re = process.waitFor();  
          System.out.println(re);
        } catch (Exception e) {
            e.printStackTrace();
        }  
  }
}

運(yùn)行結(jié)果:

java調(diào)用python腳本方式有哪些

看完了這篇文章,相信你對(duì)java調(diào)用python腳本方式有哪些有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI