ログモジュールを介したPythonの進行状況バー 質問する

ログモジュールを介したPythonの進行状況バー 質問する

Python 内でプログレス バーのさまざまなソリューションを見たことがありますが、単純な stdout ソリューションは私のプロジェクトでは機能しません。複数のクラスがあり、「logging」モジュールを使用して情報を stdout に出力しています。1 行にプログレス バーを表示し、そのたびにバッファーをフラッシュする関数があります。

簡単な進捗の例:

for i in range(100):
    time.sleep(1)
    sys.stdout.write("\r%d%%" %i)
    sys.stdout.flush()

stdout 経由で書き込み、その後バッファをフラッシュしようとすると、バッファがフラッシュされないか、進行が進みません。これを可能にするために、何らかのスレッド化や複雑なプロセスを回避したいと考えています。これを実現するための好ましい方法はありますか?

ベストアンサー1

これに対する良い解決策が見つからなかったため、進捗バーを明るくするそれを処理します。基本的には、ターミナルのスクロール領域を変更して、STDOUTに書き込むたびにプログレスバーを再描画するのではなく、プログレスバーの上にログが記録されるようにします。これにより、ターミナルを変更せずに好きなだけ書き込むことができます。ログ記録印刷など

import logging
import time
import enlighten

# Setup logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger()

# Setup progress bar
manager = enlighten.get_manager()
pbar = manager.counter(total=100, desc='Ticks', unit='ticks')

for i in range(1, 101):
    logger.info("Processing step %s" % i)
    time.sleep(.2)
    pbar.update()

おすすめ記事