好的,所以我要做的就是在我的命令行中输出一个完整的百分比,现在,我希望这只是"更新"屏幕上显示的数字.所以不知何故回到行的开头并改变它.
例如,windows relog.exe命令行实用程序(可以将.blg文件转换为.csv文件)执行此操作.如果您运行它,它将显示完成百分比.
现在这可能是用C++编写的.我不知道perl中是否可能这样做?
使用"\ 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
根据您的喜好,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.