簡単な質問があります。ログメッセージがtqdmのプログレスバーに干渉しないように、組み込みのPython loggerのprint
関数をtqdm.write
に変更するにはどうすればよいですか?ありがとう!
カスタムロギングハンドラーが必要です。
import logging
import tqdm
class TqdmLoggingHandler(logging.Handler):
def __init__(self, level=logging.NOTSET):
super().__init__(level)
def emit(self, record):
try:
msg = self.format(record)
tqdm.tqdm.write(msg)
self.flush()
except (KeyboardInterrupt, SystemExit):
raise
except:
self.handleError(record)
次に、これをロギングチェーンに追加します。
import time
log = logging.getLogger (__name__)
log.setLevel (logging.INFO)
log.addHandler (TqdmLoggingHandler ())
for i in tqdm.tqdm (range (100)):
if i == 50:
log.info ("Half-way there!")
time.sleep (0.1)
編集:コメントで熱心な読者@BlaineRogersによって指摘された、スーパーTqdmLoggingHandlerのinitメソッドの呼び出しのバグを修正しました。 (Pythonのこの曖昧な領域についてさらに読みたい場合は、 https://fuhm.net/super-harmful/ )をお勧めします。