私がこのperlアプリを持っている場合:
print `someshellscript.sh`;
たくさんのものを印刷し、完了するのに長い時間がかかりますが、シェルスクリプトの実行中にその出力を印刷するにはどうすればよいですか?
Perlは完了時にsomeshellscript.shの結果のみを出力するようですが、実行の途中で出力をフラッシュする方法はありますか?
おそらくやりたいことは次のようなものです。
open(F, "someshellscript.sh|");
while (<F>) {
print;
}
close(F);
これが実行someshellscript.sh
され、出力を読み取るパイプが開きます。while
ループは、スクリプトによって生成された出力の各行を読み取り、それを出力します。詳細については、開いているドキュメントページを参照してください。
ここでの問題は、バッククォートを使用してエスケープすると、スクリプトが文字列に保存され、それを印刷することです。このため、印刷で「フラッシュ」する方法はありません。
system()コマンドを使用すると、出力が継続的に出力されますが、出力をキャプチャすることはできません。
system "someshellscript.sh";