Java ProcessBuilder问题
我在使用>操作符写入Java ProcessBuilder问题,java,processbuilder,Java,Processbuilder,我在使用>操作符写入Process Builder中的文件时遇到问题。实际进程将正常运行,让我使用InputStreamReaderetc解析输出。我希望使用命令行(例如>test.json)将进程写入文件 这是我的代码 try { //process builder used to run a Python script ProcessBuilder process = new ProcessBuilder("python", System.getProperty("
Process Builder中的文件时遇到问题。实际进程将正常运行,让我使用InputStreamReader
etc解析输出。我希望使用命令行(例如>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
中使用
然而,这不是很好的做法。这是命令注入攻击的机会。调用外部流程是最后一种方法,您应该尽量减少在这些流程中所做的事情
因此,最好还是坚持现有的,并用Java处理重定向到文件的问题。ProcessBuilder javadoc给出了一个示例:
File log = new File("log");
processBuilder.redirectOutput(Redirect.appendTo(log));
正如@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));
是否有任何异常或问题仅限于无法获取输出文件?重定向符号由命令shell解释。在Linux中,您必须调用shell(即bash),然后执行命令行。我不想把它作为一个答案发布,因为我不确定它在Windows中是如何工作的(例如,cmd.exe是否在这里的封面下被调用)但我怀疑您需要调用cmd.exe并将其传递给要执行的命令行。您是否遇到任何异常或问题仅限于无法获取输出文件?重定向符号由命令shell解释。在Linux中,您必须调用shell(即bash),然后执行命令行。我没有将此作为答案发布,因为我不确定这在Windows中是如何工作的(即,是否在此处调用cmd.exe),但我怀疑您需要调用cmd.exe并将其传递给要执行的命令行。