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();
}
}
}