我在使用 > 运算符写入 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();
}
最佳答案
正如 @JimGarrison 指出的那样,>
由 shell 解释。在这里,您直接启动 createJson.py
进程,无需 shell。
在 UNIX 中,您可以使用 ProcessBuilder 来启动 shell:
process = new ProcessBuilder("bash", "someCommand", ">", "outputfile");
类似的东西可能适用于 Windows 和 cmd.exe
。
但是,这不是很好的做法。这是命令注入(inject)攻击的机会。调用外部进程是最后的手段,您应该尝试尽量减少在这些进程中执行的操作。
因此,您最好坚持使用现有的内容,并在 Java 中处理到文件的重定向。 ProcessBuilder javadoc给出了一个例子:
File log = new File("log");
processBuilder.redirectOutput(Redirect.appendTo(log));
关于Java ProcessBuilder 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36359952/