十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
常見的Java調(diào)用python腳本方式有兩種,下面給大家介紹一下:

成都創(chuàng)新互聯(lián)服務(wù)項目包括托克遜網(wǎng)站建設(shè)、托克遜網(wǎng)站制作、托克遜網(wǎng)頁制作以及托克遜網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,托克遜網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到托克遜省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
·通過Jython.jar提供的類庫實(shí)現(xiàn)
·通過Runtime.getRuntime()開啟進(jìn)程來執(zhí)行腳本文件
python學(xué)習(xí)網(wǎng),大量的免費(fèi)python視頻教程,歡迎在線學(xué)習(xí)!
這兩種方法我都嘗試過,個人推薦第二種方法,因?yàn)镻ython有時需要用到第三方庫,比如requests,而Jython不支持。所以本地安裝Python環(huán)境并且安裝第三庫再用Java調(diào)用是最好的方法。
相關(guān)推薦:《Python基礎(chǔ)教程》
下面通過兩個小例子,分別是不帶參數(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腳本失敗,這和我們通常意義上見到的0與1定義正好相反
int re = process.waitFor();
System.out.println(re);
} catch (Exception e) {
e.printStackTrace();
}
}
}其中說明一點(diǎn),BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream(),"GBK"));這段代碼中的GBK是為了防止Python輸出中文時亂碼加的。
運(yùn)行結(jié)果:
接下來是帶參數(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腳本失敗,這和我們通常意義上見到的0與1定義正好相反
int re = process.waitFor();
System.out.println(re);
} catch (Exception e) {
e.printStackTrace();
}
}
}運(yùn)行結(jié)果: