当前位置:  开发笔记 > 编程语言 > 正文

Perl:打印回到行首

如何解决《Perl:打印回到行首》经验,为你挑选了2个好方法。

好的,所以我要做的就是在我的命令行中输出一个完整的百分比,现在,我希望这只是"更新"屏幕上显示的数字.所以不知何故回到行的开头并改变它.

例如,windows relog.exe命令行实用程序(可以将.blg文件转换为.csv文件)执行此操作.如果您运行它,它将显示完成百分比.

现在这可能是用C++编写的.我不知道perl中是否可能这样做?



1> DVK..:

使用"\ r"或"\ 015"八进制(又名"返回插入符号"又名" 回车符"字符来自打字机日:)

> perl5.8 -e 'print "11111\r222\r3\n";'
32211
> perl5.8 -e 'print "11111\015222\0153\n";'  
32211

只是不要忘记打印至少与已经打印的最长字符串一样多的字符来覆盖任何旧字符(正如您在上面的例子中看到的那样,如果不这样做将保留旧字符).

需要注意的另一件事是,正如Michael在文章中指出的那样,当这些打印发生时,需要打开autoflush,这样输出就不会在处理结束时等待换行符.

更新:请注意在另一个答案推荐的013八进制字符实际上是一个垂直选项卡:

> perl5.8 -e 'print "11111\013222\0133\n";'    
11111
     222
        3


您还需要打开autoflushing(`$ | = 1`),因为默认输出被缓冲,直到看到换行符.(或者直到缓冲区已满,但进度表不会发生这种情况.)

2> rjh..:

根据您的喜好,pv可能会解决您的问题.它可以包装任何以文件作为输入的脚本,并添加进度条.

例如

pv data.gz | gunzip -c | ./complicated-perl-script-that-reads-stdin

pv至少为RedHat/CentOS和Ubuntu打包.更多信息:http://www.ivarch.com/programs/pv.shtml

否则我会使用CPAN,例如Term :: ProgressBar.


为Progress :: Bar提供+1,这是该工作的最佳解决方案.
推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有