Java将args传递给Python脚本

时间:2014-07-01 14:10:48

标签: java python string-concatenation

注意:已经设置了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

连接起来

1 个答案:

答案 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) {
        ...
    }
}