【发布时间】:2013-03-29 08:55:22
【问题描述】:
我使用 processbuilder fork 一个子进程,我想获取子进程的输出。所以我使用进程的 getInputStream 来获取子进程的输出。我发现父进程只有在子进程退出或子进程的标准输出已关闭。
子进程的 System.out.flush() 不起作用。
但我需要多次获得输出。在这种情况下我该怎么办?
【问题讨论】:
标签: java process inputstream outputstream
我使用 processbuilder fork 一个子进程,我想获取子进程的输出。所以我使用进程的 getInputStream 来获取子进程的输出。我发现父进程只有在子进程退出或子进程的标准输出已关闭。
子进程的 System.out.flush() 不起作用。
但我需要多次获得输出。在这种情况下我该怎么办?
【问题讨论】:
标签: java process inputstream outputstream
没有看到您的代码,也没有确切地知道您的子流程中的具体内容,很难提供帮助。这是一个适用于我的示例,其中子进程打印出文本,等待三秒钟,然后打印出更多文本。在我的机器(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();
}
}
}
【讨论】: