1. 程式人生 > >java調Python指令碼(三):傳引數問題

java調Python指令碼(三):傳引數問題

 

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出錯了沒有提示,後邊將進一步研究.