在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可以很好地控制它的控制台输出。它总是打印一些文本,每行以软件启动后的秒数作为前缀。
如何将子进程的输出打印到控制台?我在这些方法中做错了什么?
答案 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);