STDOUT从外部重定向,在控制台上看不到输出

时间:2010-06-22 11:32:55

标签: perl

我有一个程序从外部应用程序读取输出。外部应用程序提供一组输出。我的程序读取此外部应用程序while($line=<handle to external app>)的输出并将其打印到STDOUT。但“print $line STDOUT”仅打印一些行,并且当错误发生时,打印到STDOUT不起作用,但我的更多日志记录语句“push @arr,$line”已存储来自外部应用程序的完整输出。从此我知道STDOUT在发生错误时无法正常工作。

例如: 如果外部应用输出如下:


Starting command
First command executed successfully    
Error:123 :next command failed    
Program terminated

此处STDOUT仅打印:

Starting command
First command executed successfully

但是,如果我检查数组,它有完整的输出,包括错误细节。所以我猜测STDOUT已被重定向或丢失。

所以我尝试在程序开头存储STDOUT$old_handle using打开,然后尝试在使用select($old_handle)的print语句之前恢复它(在发生错误时认为有些事情重定向STDOUT)

但我没有成功,我不知道这里有什么问题。请帮帮我。

2 个答案:

答案 0 :(得分:1)

输出可能是缓冲的。尝试设置

$| = 1;

在您的计划开始时。这将导致输出立即显示,而不是稍后进行缓冲。

答案 1 :(得分:0)

猜测,可能是因为错误输出没有转到STDOUT。使用重定向

first_program |& perl_program

first_program 2>&1 | perl_program