Java ProcessBuilder 问题

标签 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();
}

最佳答案

正如 @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/

相关文章:

java - 通用代码中的困惑

java - 如何使用 Java Process Builder 执行需要多个输入的批处理脚本?

Java - 如何使用 processbuilder 调用 python 类

不同操作系统上的 Java 命令行

java - 如何通过 java 的 ProcessBuilder 通过 ssh 将参数传递给 pkill?

java - 通过java在linux中的终端上执行命令

java - Jasper 尚未更新 jboss 服务器中的文件 7

java - Android 关于 SQL Cursor 和 GROUP BY 的问题

java - 将两个 JLabel 垂直居中

java - Twitter linkify android 所有@mentions