我无法使用>运算符写入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();
}
答案 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));