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

发布于 2024-11-08 15:20:16 字数 211 浏览 4 评论 0原文

我想要一个进度指示器,它接受 Perl 的输出

   system('make')

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

如何在 make 命令运行时重定向 STDOUT 以捕获并计算行数?

I want a progress indicator that takes the output of a Perl

   system('make')

and for each line output to STDOUT from the make command, I want to output a dot as a progress indicator. Unfortunately, I'm using the Term::ReadLine::Gnu Perl mod.

How do I redirect STDOUT to capture and count the lines as the make command is running?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

吃兔兔 2024-11-15 15:20:16
#!/usr/bin/perl

my $command = "make";

open (my $cmd, "$command |");
while(<$cmd>){
  print ".";
}
print "\n";
#!/usr/bin/perl

my $command = "make";

open (my $cmd, "$command |");
while(<$cmd>){
  print ".";
}
print "\n";
雨后咖啡店 2024-11-15 15:20:16
make >& >(while read f; do echo -n .; done; echo)

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

当然,您可以在里面放一个 T 恤,以保存 make 的副本以备出现问题时使用。

由于出于某种无法解释的原因,您似乎不喜欢(既不赞成也不接受)shell 解决方案,因此这里是一个纯 perl 解决方案:

if (open(X,"make|")) { local($|)=1; while(<X>) { print "."; } close(X); print "\n";}
make >& >(while read f; do echo -n .; done; echo)

Obviously this is a shell solution, but a dot as a progress indicator is a dot.

You could of course stick a tee in there to save a copy of the make to file in case of problems.

Since you didn't seem to like (neither upvoted or accepted) the shell solution for some unexplained reason, here is a pure perl one:

if (open(X,"make|")) { local($|)=1; while(<X>) { print "."; } close(X); print "\n";}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文