我使用processbuilder fork一个子进程,我想获取子进程的输出。所以我使用进程的getInputStream来获取子进程的输出。我发现父进程只有在子进程退出或Std.out时才能读取子进程的输出子进程关闭。
子进程的 System.out.flush() 不起作用。
但我需要多次输出。在这种情况下我该怎么办?
我使用processbuilder fork一个子进程,我想获取子进程的输出。所以我使用进程的getInputStream来获取子进程的输出。我发现父进程只有在子进程退出或Std.out时才能读取子进程的输出子进程关闭。
子进程的 System.out.flush() 不起作用。
但我需要多次输出。在这种情况下我该怎么办?
如果没有看到你的代码,也没有确切地知道你的子进程中有什么,就很难提供帮助。这是一个适用于我的示例,其中子进程打印出文本,等待三秒钟,然后打印出更多文本。在我的机器(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();
}
}
}