我正在尝试编写一个程序,输出包括命令行更新的信息。我所说的更新是指,例如,如果程序正在处理文件,它可能会保留到目前为止处理的文件的更新计数。因此1 file
替换为2 files
,然后替换为3 files
,依此类推。
以下是一段代码示例,它会计算出一些文件,然后显示loading bar:
#!/bin/bash
for a in {1..10}
do
echo -ne " $a files processed.\r"
sleep 1
done
echo ""
echo -ne '##### (33%)\r'
sleep 1
echo -ne '############# (66%)\r'
sleep 1
echo -ne '####################### (100%)\r'
echo -ne '\n'
基本上,命令行输出会被定期覆盖,从而在终端中产生基于文本的原始动画效果。
这里有两个问题:
echo
命令根本不可移植。有没有办法使用python实现与此类似的功能?
答案 0 :(得分:2)
Python中的等效实现是:
import sys, time
for a in range(1,11):
sys.stdout.write('\r {0} files processed.'.format(a))
time.sleep(1)
print('')
sys.stdout.write('\r##### (33%)')
time.sleep(1)
sys.stdout.write('\r############# (66%)')
time.sleep(1)
sys.stdout.write('\r####################### (100%)')
print('')
您需要使用sys.stdout.write
,因为print
默认添加换行符。如果您正在使用print-function(Python 3,或通过在Python 2中明确导入它),您也可以使用print('text', end='')
。或者在Python 2中,您可以使用print-statement的功能来抑制行终止,如下所示:print 'text',