需要使用T:R:G mod的Perl system()命令的进度指示器

时间:2011-05-18 23:52:40

标签: perl libreadline progress-indicator

我想要一个获取Perl输出的进度指示器

   system('make')

并且对于从make命令输出到STDOUT的每一行,我想输出一个点作为进度指示器。不幸的是,我正在使用Term :: ReadLine :: Gnu Perl mod。

当make命令正在运行时,如何重定向STDOUT以捕获和计算行?

2 个答案:

答案 0 :(得分:7)

#!/usr/bin/perl

my $command = "make";

open (my $cmd, "$command |");
while(<$cmd>){
  print ".";
}
print "\n";

答案 1 :(得分:4)

make >& >(while read f; do echo -n .; done; echo)

显然这是一个shell解决方案,但作为进度指示器的点是一个点。

当然,您可以在那里贴上一个发球台,以便在出现问题时保存该文件的副本。

由于您似乎不喜欢(既没有投票或接受)shell解决方案出于某些无法解释的原因,这里只是一个纯粹的perl:

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