簡単な質問があります: 組み込みの Python ロガーのprint
機能を変更しtqdm.write
て、ログ メッセージが tqdm の進行状況バーに干渉しないようにするにはどうすればよいですか? ありがとう!
質問する
23275 次
5 に答える
42
カスタム ロギング ハンドラが必要です。
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 Exception:
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/をお勧めします)
于 2016-08-03T09:28:06.213 に答える
2
最も簡単な方法は、オブジェクトのストリームを変更することですStreamHandler
。例:
import logging
from tqdm import tqdm, trange
import time
log = logging.getLogger(__name__)
log.setLevel(logging.INFO)
handler = logging.StreamHandler()
handler.setStream(tqdm) # <-- important
handler = log.addHandler(handler)
for i in trange(100):
if i == 50:
log.info("Half-way there!")
time.sleep(0.1)
于 2021-04-01T14:09:57.123 に答える