perlの場合、STDOUTやSTDERR
perlで標準出力や標準エラー出力へ出力するにはSTDOUTやSTDERRを使用します。
#デフォルトでは標準出力へ print "This is standard output\n"; #STDOUTを指定すると、標準出力へ print STDOUT "This is standard output\n"; #STDERRを指定すると、標準エラー出力へ print STDERR "This is standard error output\n";
また、apacheの場合、STDERRの内容はerror_logへ書き込まれる為、print STDERR "hogehoge" のような debug writeを入れている人も多いと思います。
bashの場合、STDOUTは1番、STDERRは2番へ
bashの場合、STDOUTは1番、STDERRは2番で出力される為、その内容をファイルに書き込むには次のように行います。
#STDOUT, STDERRをそれぞれ別ファイルに書き込む $ command 1>file1 2>file2 #STDOUT, STDERRを同じファイルに書き込む $ command 2>&1 > file12
画面出力とファイル書込を同時に行いたいのであれば、tee コマンド
STDOUTやSTDERRの内容を画面出力すると同時にファイル書込みたい場合、tee コマンドを使用します。
$ command 2>&1 | tee log_file
perlのopen関数によるSTDOUTやSTDERRとのデータの受け取り
perlのopen関数で、STDOUTからデータの受け取ったり、STDOUTへ渡す場合は次のように行います。
#!perl #active perl for win #### ls -lの内容をopen関数で受け取る my $command = "ls -l |"; open my $fh, $command or die "can't open $command:$!"; for my $line ( <$fh> ){ print "perl write : $line"; } close $fh or die "can't close $command:$!";
#!perl #active perl for win #### STDERR の内容をopen関数で渡す my $command = "| tee log_file"; open my $fh, $command or die "can't open $command:$!"; print $fh "PERL WRITE\n"; close $fh or die "can't close $command:$!";