2009-07-26 1 views
3

どうすれば出力をターミナルとファイルに同時に出力できますか?プログラムからの出力をコンソールとログファイルに同時にどのように送ることができますか?

$ perl foo.pl > foout.txt 

私にはライブプロセスが表示されません。

出力プロセスをリアルタイムで確認し、最後にファイルの出力を得る方法はありますか?

+0

あなたのプログラムでこれを行う必要がありますか、プログラムを実行するときにシェル機能を時々使用したいですか?後者の場合、質問は[perl]ではなく、使用しているシェルと環境でタグ付けされるべきです。 –

答えて

17

perl foo.pl |teefoout.txt

+0

だから簡単!ありがとう。 – YoDar

+1

この回答を受け入れるように質問を返信すると、これはPerlの質問ではありませんでした。 –

+1

@Sinan:[perl]と[tee]のサイトを閲覧している人がどちらの方法でも見つけることができるので、[perl]タグを追加します。そして応答が明確になるので、それが利用可能であるならば 'tee'で、あるいはPerl自身の中で(おそらくもっと移植性を持たせるために)、それを使うことができます。 – Telemachus

9

ユーティリティteeがこれを行います。

+1

+1すべて;これらの答えはお互いを完全に補完します:)! – Inshallah

7

IO::Teeを参照してください。このモジュールは、あなたのプログラム内できめ細かい制御を使ってこれを選択的に行うことを可能にします(File::Teeという成熟度の低いモジュールもありますが、深刻なプロジェクトではお勧めしません)。

Log4perlも参照してください。どこでどのようにログに記録されるのかを細かく制御できます。

他の人が推奨しているように、コマンドラインからの1回の使用については、アクセス可能であればもちろんコマンドラインユーティリティteeを利用できます。

+0

私はいつもIO :: Teeをこの種のものに使ってきました。あなたは両方の経験がある場合、どのようにそれらを比較しますか。 (私はFile :: Teeのドキュメントを見ていますが、入力があれば興味があります) – Telemachus

+1

@Telemachus File :: Teeを使用することはめったになく、IO :: Teeを使用したことはありません両者の比較を行う位置。 File :: Teeは私が必要なときにうまく機能しました。一方、Log4perlは素晴らしいです。 –

+0

@Sinan:十分に公正。私はFile :: Teeを見て自分自身を比較します。私はちょうど私が尋ねると思った。 – Telemachus

0

それとも、可能性があり、画面とログファイル(UNIXではないか、ティープログラムを持っている場合には)

perlのfoo.plに印刷するためのperlのプログラムにパイプを| PerlのmyPipe.pl MYFILE.TXT

データがMYFILE.TXTにcaptureedされ

myPipe.plは

# 
open OUTFILE,">$ARGV[0]" or die "Unable to open file: $ARGV[0]\n"; 

while(<>) 
{ 
    print; 
    print OUTFILE; 
} 
close OUTFILE; 

これはSTDINからの入力の行を読み取り、画面にそれを印刷している場合次にファイルに移動します。終了に達すると、ファイルを閉じます

+0

heh。あなたは車輪を開発しました:) – Znik

関連する問題