Python不会继续替换终端中的同一行,但它会替换“name”并将进度条添加到新行,这会产生大量进度条...这只会在我使用时发生\ n“之前”名称“。如何才能使结果看起来像这样?
[### ] 4%
name2
蟒
mylist = ['name1', 'name2', 'name3',...'name66']
for name in mylist:
sys.stdout.write('\r[%-66s] %d%%' % ('#'*prog, (prog*1.51515151515))+'\n'+name)
sys.stdout.flush()
答案 0 :(得分:2)
您可以尝试progressbar。它运作良好,并且我的经验很容易配置。
答案 1 :(得分:1)
你可以通过使用足够的空格来实现这一点,看起来像一个新行,但实际上并没有使用换行符。然后使用退格符\b
将光标移回到行的开头并覆盖您编写的所有内容。
我扩展了你的例子,使它成为一个可运行的脚本,在那里抛出一个睡眠并手动递增prog
。
import sys
from time import sleep
import os
# Get the number of columns in the terminal
rows, columns = os.popen('stty size', 'r').read().split()
columns = int(columns)
mylist = ['name1', 'name2', 'name3','name4']
prog = 0
for name in mylist:
prog += 10
bar = '[%-66s] %d%%' % ('#'*prog, (prog*1.51515151515))
spaces_left = columns-len(bar)
sys.stdout.write(bar+(" "*spaces_left)+name+('\b'*(len(name) + columns)))
sys.stdout.flush()
sleep(.5)