python在termin中堆叠行

2024-06-26 02:10:09 发布

您现在位置:Python中文网/ 问答频道 /正文

Python不会继续替换终端中的同一行,但它会替换“name”并将进度条添加到新行中,这会导致一大堆进度条…只有在“name”之前使用“\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()

Tags: 进度条namein终端forstdoutsys情况
2条回答

您可以通过使用足够的空格来实现这一点,这些空格看起来像一个新行,但实际上不使用换行符。然后使用退格字符\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)

你可以试试progressbar。根据我的经验,它运行良好,易于配置。你知道吗

相关问题 更多 >