注意:已经设置了python.exe的路径
我正在尝试创建一个将变量args
(或任何其他变量)传递给Python脚本的Java程序。
import java.io.*;
public class PythonCallTest{
public static void main (String[] args){
String s = null;
Runtime r = Runtime.getRuntime();
try{
Process p = r.exec("cmd /c python ps.py+",args);
BufferedReader stdInput = new BufferedReader(new
InputStreamReader(p.getInputStream()));
BufferedReader stdError = new BufferedReader(new
InputStreamReader(p.getErrorStream()));
while ((s = stdInput.readLine()) != null){
System.out.println(s);
}
while ((s = stdError.readLine()) != null){
System.out.println(s);
}
System.exit(0);
}
catch(IOException ioe){
ioe.printStackTrace();
System.exit(-1);
}
}
}
程序编译但是当我用
运行它时java PythonCallTest sender-ip=10.10.10.10
我收到错误
'蟒'不被识别为内部或外部命令,可操作程序或批处理文件。
如何正确连接 r.exec中的字符串(" cmd / c python ps.py +",args)
修改
如果我执行以下
Process p = r.exec("cmd /c python ps.py sender-ip=10.251.22.105");
然后程序工作。已经设置了python.exe的路径。我只需要知道如何将 args 添加到r.exec,即如何将cmd / c python ps.py与 args
连接起来答案 0 :(得分:2)
您正在传递args
作为Runtime.exec(...)
的第二个参数。
这会覆盖新进程的默认(继承)环境无用,因此Path
变量不再包含python.exe
的路径。
您需要使用此版本的Runtime.exec(...)
:
public Process exec(String[] cmdarray);
你会这样做:
public static void main(String[] args) {
...
List<String> process_args = new ArrayList<String>(Arrays.asList("cmd", "/c", "python", "ps.py"));
process_args.addAll(Arrays.asList(args));
Runtime r = Runtime.getRuntime();
try {
Process p = r.exec(process_args.toArray(new String[] {}));
...
} catch (IOException e) {
...
}
}