4

Perl の出力を取得する進行状況インジケーターが必要です

   system('make')

make コマンドから STDOUT に出力される行ごとに、進行状況インジケーターとしてドットを出力したいと考えています。残念ながら、私は Term::ReadLine::Gnu Perl mod を使用しています。

make コマンドの実行中に STDOUT をリダイレクトして、行をキャプチャしてカウントするにはどうすればよいですか?

4

2 に答える 2

7
#!/usr/bin/perl

my $command = "make";

open (my $cmd, "$command |");
while(<$cmd>){
  print ".";
}
print "\n";
于 2011-05-19T00:29:13.623 に答える
4
make >& >(while read f; do echo -n .; done; echo)

明らかにこれはシェル ソリューションですが、進行状況インジケーターとしてのドットはドットです。

もちろん、問題が発生した場合に備えて、make のコピーをファイルに保存するために、そこにティーを貼り付けることもできます。

説明のつかない理由でシェル ソリューションが気に入らなかった (支持も受け入れもされなかった) ように見えたので、純粋な perl ソリューションを次に示します。

if (open(X,"make|")) { local($|)=1; while(<X>) { print "."; } close(X); print "\n";}
于 2011-05-19T00:06:43.790 に答える