Java ProcessBuilder问题

时间:2016-04-01 15:17:16

标签: java processbuilder

我无法使用>运算符写入Process Builder中的文件。实际的进程运行正常,让我使用InputStreamReader等解析输出。我希望使用命令行(例如> test.json)将进程写入文件。

这是我的代码

try {
    //process builder used to run a Python script 
    ProcessBuilder process = new ProcessBuilder("python",
    System.getProperty("user.dir")+"\\createJson.py","--structure","cloc.csv",
                                  "--weights","EntityEffort.csv",">","a.json");

    process.directory(new File("c:\\users\\chris\\desktop\\test2"));
    Process p = process.start();

} catch(Exception e) {
    e.printStackTrace();
}

1 个答案:

答案 0 :(得分:1)

正如@JimGarrison指出的那样,>由shell解释。在这里,您直接启动createJson.py的流程,没有shell。

在UNIX中,您可以使用ProcessBuilder来启动shell:

process = new ProcessBuilder("bash", "someCommand", ">", "outputfile");

类似的东西可能适用于Windows和cmd.exe

然而,这不是很好的做法。这是命令注入攻击的机会。调用外部流程是最后的方法,您应该尽量减少在这些流程中的操作。

所以你最好坚持使用你拥有的东西,并处理重定向到Java文件。 ProcessBuilder javadoc给出了一个例子:

File log = new File("log");
processBuilder.redirectOutput(Redirect.appendTo(log));