0

Python はターミナルの同じ行を置き換え続けませんが、「名前」を置き換え、プログレス バーを新しい行に追加します。その結果、プログレス バーが大量にスタックされます...これは、「\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()
4

2 に答える 2

2

これにはプログレスバーを試すことができます。それはうまく機能し、私の経験では設定が簡単です。

于 2013-03-06T19:48:20.437 に答える
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)
于 2013-03-06T20:56:13.127 に答える