1

簡単な while ループを使用してプログレス バーを表示するスクリプトがありますが、期待どおりに動作していないようです。

count = 1
maxrecords = len(international)
p = ProgressBar("Blue")
t = time
while count < maxrecords:
    print 'Processing %d of %d' % (count, maxrecords)
    percent = float(count) / float(maxrecords) * 100
    p.render(int(percent))
    t.sleep(0.5)
    count += 1

「p.render...」でループしているように見え、「print 'Processing %d of %d...'」に戻りません。

更新:申し訳ありません。ProgressBar.render() は、進行状況バーをレンダリングするときに「print 'Processing...」の出力を削除するようです。プログレスバーはhttp://nadiana.com/animated-terminal-progress-bar-in-pythonからのものです

4

4 に答える 4

5

私のウェブサイトで ProgressBar 実装を使用しているようです。メッセージを出力したい場合は、render で message 引数を使用できます

p.render(percent, message='Processing %d of %d' % (count, maxrecords))
于 2009-08-21T15:28:32.657 に答える
3

これは、Python でループを記述する方法ではありません。

maxrecords = len(international)
p = ProgressBar("Blue")
for count in range(1, maxrecords):
    print 'Processing %d of %d' % (count, maxrecords)
    percent = float(count) / float(maxrecords) * 100
    p.render(int(percent))
    time.sleep(0.5)

バーをレンダリングするだけでなく、実際にレコードで何かをしたい場合は、次のようにします。

maxrecords = len(international)
for count, record in enumerate(international):
    print 'Processing %d of %d' % (count, maxrecords)
    percent = float(count) / float(maxrecords) * 100
    p.render(int(percent))
    process_record(record)   # or whatever the function is
于 2009-08-21T15:01:58.457 に答える
2

の実装は何ProgressBar.render()ですか? 以前の出力が上書きされるようにカーソルを移動する端末制御文字を出力していると思います。これにより、制御フローが正常に機能していないという誤った印象が生じる可能性があります。

于 2009-08-21T15:08:47.803 に答える
1

(1) [問題の一部ではありませんが、...]t = timeずっと後に続くのは、むき出しのものを見て、それが何であるかを見つけるために逆方向に読まなけれt.sleep(0.5)ばならない人にとって、煩わしさの原因となるでしょう。t

(2) [問題の一部ではありませんが ...]countと同じ値でループに入ることができませんmaxrecords。たとえば、maxrecordsが 10 の場合、ループ内のコードは 9 回だけ実行されます。

(3)あなたが示したコードには、「p.render()でループしている」という考えをサポートするものは何もありません-引数がゼロの場合にrenderメソッド自体がループしない限りmaxrecords、 17909. p.render(....) を一時的に (say) に置き換えてみてください

print "pretend-render: pct =", int(percent)

于 2009-08-21T15:28:48.740 に答える