Java Process无法通过标准IO重定向读取Factorio的输出

时间:2017-11-11 23:06:12

标签: java executable

在Java中,我正在尝试创建一个控制台程序来执行Factorio,(请注意,没有我可以控制或查看的代码。)一个用C ++编写的具有特定参数的游戏。 (这是根据我的输入计算的。)我可以成功运行它,但我希望它的输出流被重定向到我的控制台输出。我尝试了几种方法:

ProcessBuilder builder = new ProcessBuilder(command);
builder.directory(executable.getParentFile());
builder.redirectOutput(Redirect.INHERIT);
Process fact = builder.start();
int result = fact.waitFor();

没有输出

ProcessBuilder builder = new ProcessBuilder(command);
builder.directory(executable.getParentFile());
builder.inheritIO();
Process fact = builder.start();
int result = fact.waitFor();

没有输出

ProcessBuilder builder = new ProcessBuilder(command);
builder.directory(executable.getParentFile());
Process fact = builder.start();
try(InputStream inp = fact.getInputStream()){
    do{
        inp.transferTo(System.out);
    }while(factorio.isAlive());
    inp.transferTo(System.out);
}
System.out.println();
int result = fact.waitFor();

打印一个空行。

当我自己在cmd中运行相同的命令时,Factorio可以很好地控制它的控制台输出。它总是打印一些文本,每行以软件启动后的秒数作为前缀。

如何将子进程的输出打印到控制台?我在这些方法中做错了什么?

1 个答案:

答案 0 :(得分:1)

这应该相对容易。尝试使用您知道最先工作的简单流程:

Process curl = new ProcessBuilder("curl", "-sD", "-", "https://google.com")
    .redirectErrorStream(true)
    .start();

// Will block until the end of the input stream.
curl.getInputStream().transferTo(System.out);