java調用python腳本傳參

1、不傳參調用

package test;

import java.io.BufferedReader;  
import java.io.InputStreamReader;  
  
public class demo {  
    public static void main(String[] args) throws Exception  
    {  
          try{
        	 String s;
            Process rt=Runtime.getRuntime().exec("python D:\\eclipe\\python\\controller.py");  
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(rt.getInputStream())); 
            while((s=bufferedReader.readLine()) != null){
            	System.out.println(s);}
            rt.waitFor();
          }catch(Exception e ){
        	  e.printStackTrace(); 
          }
      
  
    }  
}

如果python 中有print 則必須加Buffer那三行,不然數據不能輸出,會導致線程阻塞

2、傳參

python 代碼test.py

        options,args = getopt.getopt(sys.argv[1:], "", ["caption=","proc_name="])
        if options != []:
            for name,value in options:
                if name == '--caption':
                    CAPTION = value
                if name == '--proc_name':
                    PROC_NAME = value

首先要import getopt模塊,

函數getopt(args, shortopts, longopts = [])
第一個一般是固定格式,如代碼所寫,第二個是短格式(-)第二個是長格式(--),比較習慣用長格式
代碼中第一行的意思是,傳入兩個參數,第一個參數名稱爲caption,第二個爲proc_name,長格式
傳遞寫法
python test.py --caption value_caption --proc_name value_proc_name 
修改後的java代碼
package test;

import java.io.BufferedReader;  
import java.io.InputStreamReader;  
  
public class demo {  
    public static void main(String[] args) throws Exception  
    {  
          try{
        	 String s;
            Process rt=Runtime.getRuntime().exec("python D:\\eclipe\\python\\controller.py --caption value --proc_name value");  
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(rt.getInputStream())); 
            while((s=bufferedReader.readLine()) != null){
            	System.out.println(s);}
            rt.waitFor();
          }catch(Exception e ){
        	  e.printStackTrace(); 
          }
      
  
    }  
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章