如何在Perl命令行应用程序中更新进度显示?

5

我有一个小的Perl脚本(在Windows上),它作为我的日常业务辅助工具检查一些文件。目前,它会打印出类似于以下内容...

0%
25%
50%
75%
Complete

但是我记得以前用过的脚本没有按行打印进度,而是通过更新显示器上的输出来更新输出,可能是通过将光标移回并覆盖原有内容实现的。

有人知道需要什么魔法吗?对于我来说,可移植性不重要,这个脚本很容易替换掉。

6个回答

8
你可以使用curses制作一个漂亮的进度条。 编辑: 或者做类似于这样的事情:
print "#####                                 [ 10%]\r";
# Do something
print "##########                            [ 20%]\r";
# Do something else
print "###############                       [ 30%]\r";
# Do some more
# ...
# ...
# ...
print "##################################### [100%]\n";
print "Done.\n";

我认为在Windows上,您需要在使用\r之前调用binmode(STDOUT)才能按照您想要的方式工作。 - Brad Gilbert

6
除了其他答案之外,\r将返回到当前行的开头。

6

如果你需要在Perl中做某些事情,很可能有人已经做过并上传到了CPAN。看一下一些模块的名称中带有“progress”的模块


6
你可能会对Smart Comments感兴趣。这可能比编写自己的进度条更容易。

谢谢zoul,你在这里推荐的模块非常聪明;-)。 - nav.jdwdw

2
您应该能够打印一个退格字符 '\b' 以将光标向后移动,以便您可以覆盖先前打印的内容。

0

我不知道这在Perl中是否有效,但在C/C++中,您可以使用

\b
来进行退格。使用多个这样的字符,您可以将光标移动到覆盖旧值的位置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接