0

複数の外部コマンドを実行し、STDERR および STDOUT からの出力を、プロセスに関するドキュメントとして機能する一連の独自の print ステートメントと共にログファイルに出力する perl スクリプトがあります。

私の問題は、以下の例のように、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 にアクセスするにはどうすればよいですか? または、バッチの最後でない場合は印刷しないようにします。

よろしくお願いします。

4

0 に答える 0