0

我使用processbuilder fork一个子进程,我想获取子进程的输出。所以我使用进程的getInputStream来获取子进程的输出。我发现父进程只有在子进程退出或Std.out时才能读取子进程的输出子进程关闭。

子进程的 System.out.flush() 不起作用。

但我需要多次输出。在这种情况下我该怎么办?

4

1 回答 1

2

如果没有看到你的代码,也没有确切地知道你的子进程中有什么,就很难提供帮助。这是一个适用于我的示例,其中子进程打印出文本,等待三秒钟,然后打印出更多文本。在我的机器(Windows XP 上的 Java 6)上,我看到了初始文本、暂停,然后是剩余的文本——所有这些都在子进程退出之前。

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;


public class TestProcessBuilder
{
    public static void main(String args[])
    {
        try
        {
            String threeCommands[] = 
                { "cmd", "/c", 
                    "dir", // prints out text 
                    "&&",
                    "ping", "127.0.0.1", "-n", "3", ">", "nul", // waits 3 seconds
                    "&&",
                    "dir" // prints out more text
                };
            ProcessBuilder builder = new ProcessBuilder(threeCommands);
            builder.directory(new File("C://"));
            builder.redirectErrorStream();

            Process subProcess = builder.start();

            // this reads from the subprocess's output stream
            BufferedReader subProcessInputReader = 
                new BufferedReader(new InputStreamReader(subProcess.getInputStream()));

            String line = null;
            while ((line = subProcessInputReader.readLine()) != null)
                System.out.println(line);

            subProcessInputReader.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}
于 2013-04-07T07:05:40.210 回答