您的位置:首页 > 编程语言 > Python开发

java调用python脚本传参

2017-01-11 15:26 531 查看
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();
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: