【问题标题】:How can I update a progress display on a Perl command-line application?如何更新 Perl 命令行应用程序的进度显示?
【发布时间】:2010-09-21 14:24:26
【问题描述】:

我有一个小的 Perl 脚本(在 Windows 上),它可以帮我检查一些文件,以帮助我完成日常业务。目前它打印出类似...

0%
25%
50%
75%
Complete

但我记得我过去使用过的脚本不是逐行打印进度,而是更新了显示器上的输出,大概是通过向后移动光标并重叠打印什么在那里。

有人知道需要什么魔法吗?可移植性对我来说并不重要,脚本是一次性的。

【问题讨论】:

    标签: windows perl command-line progress-bar


    【解决方案1】:

    您可以使用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 上您需要调用 binmode(STDOUT),然后 \r 才能按照您想要的方式工作。
    【解决方案2】:

    除了其他答案,\r 会回到当前行的开头

    【讨论】:

      【解决方案3】:

      如果您需要在 Perl 中做某事,很可能有人已经完成并将其上传到 CPAN。用"progress" in their name查看部分模块。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 谢谢 zoul,你在这里推荐的一个非常聪明的 ;-) 模块。
        【解决方案5】:

        您应该能够打印退格字符“\b”来向后移动光标,这样您就可以覆盖之前打印的内容。

        【讨论】:

          【解决方案6】:

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

          \b
          用于退格。使用其中的几个,您可以移动光标以覆盖旧值。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-07-13
            相关资源
            最近更新 更多