java調Python指令碼(三):傳引數問題
阿新 • • 發佈:2018-12-03
java調Python的指令碼,我們需要將java這邊的引數傳到Python那邊使用,所以就需要傳參。
Python需要匯入系統包 import sys,然後使用 sys.argv[i] 接收java傳過來的引數就可以。
1、Python程式碼:
# -*- coding:utf-8 -*- """ @author:ailo55 @file:demo.py @time:2018/9/26 13:58 """ import sys if __name__ == '__main__': print("java 調Python指令碼,成功了!") #遍歷接收到的所有引數 for i in range(0, len(sys.argv)): #把每一個打印出來 print("Python接收引數",i,":",sys.argv[i])
2、java直接在陣列中傳就可以,如下:
public class PyRun { public static void main(String[] args) { try { System.out.println("run start...."); //陣列的第一個引數Python命令,第二是Python指令碼檔案的絕對路徑 String[] args1 = new String[] { "python", "C:\\fintel\\pytools\\add.py","引數1","引數2","引數3"}; Process pr = Runtime.getRuntime().exec(args1);//執行指令碼命令 BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream(),"GBK")); String line; while ((line = in.readLine()) != null) { System.out.println(line); } in.close(); pr.waitFor(); System.out.println("run end...."); } catch (Exception e) { e.printStackTrace(); } } }
3、跑起來的結果:
4、總結:從返回的結果,得出了一個注意的東西,java這邊傳過去的引數,Python接收是從陣列第二下標開始算起的,即就是從檔案的路徑引數開始,因為第一個元素是執行Python的命令,就是在cmd執行Python指令碼一樣。所以在Python那邊接收引數處理的時候就要注意了,要去相對應的引數,不然就容易出錯。還有一個問題就是ava調Pythond的時候,如果Python出錯了沒有提示,後邊將進一步研究.