0

Python 不会继续替换终端中的同一行,但它会替换“名称”并将进度条添加到新行中,这会导致大量进度条......这仅在我使用“\n”时发生在“名称”之前。我怎样才能让结果看起来像这样?

[###                                                               ] 4%
name2

Python

mylist = ['name1', 'name2', 'name3',...'name66']

for name in mylist:
  sys.stdout.write('\r[%-66s] %d%%' % ('#'*prog, (prog*1.51515151515))+'\n'+name)
  sys.stdout.flush()
4

2 回答 2

2

您可以为此尝试进度条。根据我的经验,它运行良好并且易于配置。

于 2013-03-06T19:48:20.437 回答
1

您可以通过使用足够的空格来实现这一点,看起来像一个新行,但实际上不使用换行符。然后使用退格字符\b将光标移回行首并覆盖您所写的所有内容。

我稍微扩展了您的示例,使其成为一个可运行的脚本,方法是在其中放置一个 sleep 并手动递增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)
于 2013-03-06T20:56:13.127 回答