我想抓住飞行Process
输出,如下所示:
new Thread() {
public void run() {
final ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", "myexec.exe");
p = builder.start();
InputStream i = p.getInputStream();
Reader r = new InputStreamReader(i, "US-ASCII");
int ch = 32;
do {
System.out.print(ch);
} while ((ch = r.read()) != -1);
}
}.start();
在我看来,当Process
正在运行ch == null
时,当Process
被终止时,所有丢失的字符都会突然打印出来。
如何在Process
运行期间阅读输出?
答案 0 :(得分:0)
您需要生成其他线程来使用流中的数据并等待主进程中的进程完成:
...
p = builder.start();
new Thread() {
public void run() {
InputStream i = p.getInputStream();
Reader r = new InputStreamReader(i, "US-ASCII");
int ch = 32;
do {
System.out.print(ch);
} while ((ch = r.read()) != -1);
}
}.start();
// wait for process to complete while thread above consumes data
p.waitFor();
答案 1 :(得分:0)
好的,我得到了解决方案。 myexec.exe是py2exe生成的可执行python文件。
归因于How to flush output of Python print?
我在每个sys.stdout.flush()
函数后放print
,问题就消失了