Perl在打印到文件之前捕获并修改STDERR

时间:2013-07-02 22:43:36

标签: perl redirect logging stderr intercept

我有一个执行多个外部命令的perl脚本,并将STDERR和STDOUT的输出打印到一个日志文件以及一系列我自己的print语句,作为该过程的文档。

我的问题是STDERR重复相同的打印,如下例所示。我想在打印之前捕获它,并替换为我运行的每个命令的最终结果。

blocks evaluated : 0
blocks evaluated : 10000
blocks evaluated : 20000
blocks evaluated : 30000
...
blocks evaluated : 3420000
blocks evaluated : 3428776

以下是我如何获得STDOUT和STDERR

my $logfile = "Logfile.log";     #log file name
#--- Open log file for append if specified ---
if ( $logfile ) 
  {
    open ( OLDOUT, ">&", STDOUT )  or die "ERROR: Can't backup STDOUT location.\n";
    close STDOUT;
    open ( STDOUT, ">", $logfile ) or die "ERROR: Logfile [$logfile] cannot be opened.\n"; 
  }

if ( $logfile ) 
  { 
    open ( OLDERR, ">&", STDERR ) or die "ERROR: Can't backup STDERR location.\n";
    close STDERR;
    open ( STDERR, '>&STDOUT'   ) or die "ERROR: failed to pass STDERR to STDOUT.\n";
  }

并关闭它们

close STDERR;  
open ( STDERR, ">&", OLDERR ) or die "ERROR: Can't fix that first thing you broke!\n";
close STDOUT; 
open ( STDOUT, ">&", OLDOUT ) or die "ERROR: Can't fix that other thing you broke!\n";   

如何在每次打印时访问STDERR进行更换?如果它不是批次中的最后一个,则阻止它打印。

非常感谢提前。

0 个答案:

没有答案