python在终端堆叠线

时间:2013-03-06 19:44:56

标签: python

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()

2 个答案:

答案 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)