2

我正在尝试/usr/bin/perl -e 'for(my $i=0;$i<1000;$i++){print 1x1000;print STDERR 2x1000;}'使用我的程序运行(在终端中工作)。

ProcessBuilder pb = new ProcessBuilder(go); //go is the command
process = pb.start();
BufferedReader incommandbuf = new BufferedReader(new InputStreamReader(process.getInputStream()),1024*1000);
BufferedReader errcommandbuf = new BufferedReader(new InputStreamReader(process.getErrorStream()),1024*1000);
stdString = "";

while ((line = incommandbuf.readLine()) != null)
{
    stdString += line + "\n";
}
String errorstrtemp = "";
while ((line = errcommandbuf.readLine()) != null)
{
    errorstrtemp += line + "\n";
}

如果我尝试运行它,它会挂起while ((line = incommandbuf.readLine()) != null)。如果我将命令更改为/usr/bin/perl -e 'for(my $i=0;$i<64;$i++){print 1x1000;print STDERR 2x1000;}'. 如果它上升到 65 或更高,它就不起作用。起初我以为我只需要更改 BufferedReaders 的大小,但它没有帮助。关于是什么原因的任何线索?如果需要,我将提供任何其他信息。谢谢。

4

1 回答 1

5

您一次阅读一个流。当另一个流填满缓冲区时,您的 Process 将停止等待您读取它。解决方案是读取不同线程中的流或使用ProcessBuilder.redirectErrorStream

于 2012-11-08T15:59:52.850 回答