Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java进程可以';t读取Factorio';s通过标准IO重定向输出 中,我试图创建一个控制台程序来执行,(注意,我没有代码可以控制或查看。)用C++编写的一个游戏,带有特定的参数。(这是根据我的输入计算的。)我可以成功地运行它,但我希望它的输出流被重定向到我的控制台输出。我尝试了几种方法: ProcessBuilder builder = new ProcessBuilder(command); builder.directory(executable.getParentFile()); builder.redirectOutput(Redirect.INHERIT); Process fact = builder.start(); int result = fact.waitFor();_Java_Executable - Fatal编程技术网

Java进程可以';t读取Factorio';s通过标准IO重定向输出 中,我试图创建一个控制台程序来执行,(注意,我没有代码可以控制或查看。)用C++编写的一个游戏,带有特定的参数。(这是根据我的输入计算的。)我可以成功地运行它,但我希望它的输出流被重定向到我的控制台输出。我尝试了几种方法: ProcessBuilder builder = new ProcessBuilder(command); builder.directory(executable.getParentFile()); builder.redirectOutput(Redirect.INHERIT); Process fact = builder.start(); int result = fact.waitFor();

Java进程可以';t读取Factorio';s通过标准IO重定向输出 中,我试图创建一个控制台程序来执行,(注意,我没有代码可以控制或查看。)用C++编写的一个游戏,带有特定的参数。(这是根据我的输入计算的。)我可以成功地运行它,但我希望它的输出流被重定向到我的控制台输出。我尝试了几种方法: ProcessBuilder builder = new ProcessBuilder(command); builder.directory(executable.getParentFile()); builder.redirectOutput(Redirect.INHERIT); Process fact = builder.start(); int result = fact.waitFor();,java,executable,Java,Executable,没有输出 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

没有输出

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();
没有输出

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给出了它的控制台输出。它总是打印一些文本,每行前缀为自软件启动以来的秒数


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

这应该相对容易。首先,请尝试一个简单的过程:

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);

你在用Windows吗?然后确保factorio确实将其输出打印到stdout。我不知道factorio以及他们是如何实现它的,但在Windows中不使用标准IO流是很常见的(无论出于什么原因)。我无法控制软件的代码。我也不能看。不要使用蒸汽版本,直接从网站上获取非蒸汽版本。链接您的steam帐户将允许非steam下载。我确实链接了我的steam帐户。事实上,我在论坛上也问过同样的问题。当我使用非蒸汽版本时也会发生同样的情况。打印到cmd,但不在我的应用程序中。有没有可能软件是故意这么做的?我非常怀疑它是故意这么做的,我在rlwrap下运行factorio来获得输入预处理的好处,我通过awk将其输出传输到生产计时基准,两者都很好。rlwrap使用伪端子,管道只是原始重定向。链接您的steam帐户不会自动将您切换到un steam版本,您必须单独下载并运行它。我想这开始将这个问题转移到特定于软件的问题上。是的,它确实适用于我自己编写的应用程序和其他一些进程。但是,如果从cmd执行,而不是从另一个应用程序中运行,软件如何将输出写入控制台呢?他们能测试一下吗?