<blockquote>
<p>I've searched and only found examples where we output the output after
the system command has finished, rather than during its execution.</p>
</blockquote>
<p>这很奇怪,因为您的示例应该在执行命令时转储输出。在</p>
<p>您可以尝试直接从<code>InputStream</code>读取,而不是使用<code>BufferedReader</code>,因为在进程退出之前,readLine所需的条件可能无法满足。在</p>
<p>我还建议您直接使用<code>ProcessBuilder</code>over <code>Process</code>,因为除了其他任何东西,它允许您将输出从错误流重定向到输入流,允许您只读取一个流而不是两个。。。在</p>
<p>这也可能是Python的问题,以及它如何刷新输出缓冲区。。。在</p>
<p>例如,与其等待<code>BufferedReader</code>决定何时返回,不如在流发生/被报告时打印流中的每个字符</p>
<pre><code> ProcessBuilder pb = new ProcessBuilder("test.py");
pb.redirectError();
Process p = pb.start();
InputStream is = null;
try {
is = p.getInputStream();
int in = -1;
while ((in = is.read()) != -1) {
System.out.print((char)in);
}
} finally {
try {
is.close();
} catch (Exception e) {
}
}
</code></pre>
<p><strong>更新</strong></p>
<p>在进行一点阅读之后,Python似乎在将其发送到stdout之前将其缓冲出来。我不认为您可以在Java端解决这个问题,但是需要改变Python的运行方式或脚本的工作方式。在</p>
<p>有关详细信息,请参见<a href="https://stackoverflow.com/questions/230751/how-to-flush-output-of-python-print">How to flush output of Python print?</a></p>