以前の回答のコードを使用して、進行状況バー機能を構築しました: https://stackoverflow.com/a/3173331/939628
コードを変更するまで問題なく動作していました...この問題を再現するためにコードを単純化しました。
基本的に、私はいくつかの項目をループしており、実行する操作の数を計算する前に、進行状況を 0 に設定し、反復ごとに進行状況を更新してもう 1 つ更新します。また、進行状況 % を出力する update_progress 関数も呼び出します。
進行状況に応じて行を更新する必要がありますが、最後に呼び出したとき (つまり、100% で完了したとき) にのみ印刷が表示されます。
本当に奇妙なのは、 update_progress() を呼び出す前に「print」を呼び出すことです (現在の行を更新するという本来の動作とは異なります)。さらに奇妙なのは、私が書いた別のクラスから一連の関数への関数呼び出しを削除することでバグを見つけたことです....どういうわけか、その関数はこの印刷を「有効」にしていました...さらに奇妙なのは、「修正」されたコードですforループの問題により、最初の0%出力が有効になりました...
印刷が機能しない理由は何ですか?
import time
import itertools
import sys
def go():
items = range(0,10)
prog = 0.0 #Real so division works
total = len(items)
update_progress(0) # Even this intial call doesn't work
for i in items:
time.sleep(0.2)
prog = prog + 1
# adding print here makes it print the output from below to a new line
update_progress(int(prog / total * 100))
def update_progress(progress):
sys.stdout.write('\r[{0}] {1}%'.format('#' * (progress / 10), progress))