10

Perlプログラムを実行しています。コンソールに印刷されているものが何であれ、それをテキストファイルにリダイレクトしたいと思います。

4

4 に答える 4

18

このための推奨される方法は、コマンドラインを介してリダイレクトを処理することです。

perl -w my_program.pl > my_output.txt

stderr出力も含めたい場合は、これを行うことができます(シェルがbashであると想定)。

perl -w my_program.pl &> my_output.txt
于 2012-05-21T08:54:57.017 に答える
11

>CLIでは、次のように使用できます。

perl <args> script_name.pl > path_to_your_file

perlスクリプト内でこれを実行する場合は、何かを出力する前に次のコードを追加してください。

open(FH, '>', 'path_to_your_file') or die "cannot open file";
select FH;
# ...
# ... everything you print should be redirected to your file
# ...
close FH;  # in the end
于 2012-05-21T08:58:42.920 に答える
6

Unixでは、端末に送られるすべてのものをキャプチャするために、標準出力と標準エラーの両方をリダイレクトする必要があります。

bashを使用すると、コマンドは次のようになります

$ ./my-perl-program arg1 arg2 argn > output.txt 2>&1

Cシェル、などのcsh派生物tcsh、および新しいバージョンのbashは理解します

$ ./my-perl-program arg1 arg2 argn >& output.txt

同じことを意味します。

Windowsのコマンドシェルの構文は、Bourneシェルの構文に似ています。

C:\> my-perl-program.pl args 1> output.txt 2>&1

Perlコードでこのリダイレクトを設定するには、次を追加します。

open STDOUT, ">", "output.txt" or die "$0: open: $!";
open STDERR, ">&STDOUT"        or die "$0: dup: $!";

プログラムの実行可能ステートメントの先頭まで。

于 2012-05-21T15:40:47.127 に答える
3

出力をログだけでなくコンソールにも出力する場合は、この行をコードに追加します(たとえば、printステートメントの前に)

open (STDOUT, "| tee -ai logs.txt");
print "It Works!";

スクリプトに最後に印刷した後

close (STDOUT);

エラーメッセージの場合のみ、

open (STDERR, "| tee -ai errorlogs.txt");
于 2015-10-13T05:04:45.910 に答える