Нужен индикатор прогресса для команды Perl system (), использующей мод T: R: G - PullRequest
4 голосов
/ 19 мая 2011

Я хочу индикатор прогресса, который принимает вывод Perl

   system('make')

и для каждой строки, выводимой в STDOUT из команды make, я хочу вывести точку в качестве индикатора прогресса. К сожалению, я использую мод Term :: ReadLine :: Gnu Perl.

Как перенаправить STDOUT для захвата и подсчета строк при выполнении команды make?

Ответы [ 2 ]

7 голосов
/ 19 мая 2011
#!/usr/bin/perl

my $command = "make";

open (my $cmd, "$command |");
while(<$cmd>){
  print ".";
}
print "\n";
4 голосов
/ 19 мая 2011
make >& >(while read f; do echo -n .; done; echo)

Очевидно, что это решение оболочки, но точка как индикатор прогресса - это точка.

Конечно, вы можете вставить туда тройник, чтобы сохранить копию марки в файл в случае проблем.

Поскольку вам, похоже, не понравился (не проголосовал и не принял) решение оболочки по какой-то необъяснимой причине, вот чисто Perl:

if (open(X,"make|")) { local($|)=1; while(<X>) { print "."; } close(X); print "\n";}
...