进程(python脚本 - > py2exe)在Process结束之前,InputStream为NULL

时间:2014-03-12 17:46:53

标签: java python multithreading process py2exe

我想抓住飞行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运行期间阅读输出?

2 个答案:

答案 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,问题就消失了