我有一个 perl 脚本,它执行多个外部命令,并将 STDERR 和 STDOUT 的输出以及一系列我自己的打印语句打印到日志文件中,以作为该过程的文档。
我的问题是 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?或者如果它不是最后一批,则阻止它打印。
提前谢谢了。