У меня есть простой вопрос: как изменить встроенную функцию журнала print
на Python на tqdm.write
так, чтобы протоколирование сообщений не мешало индикаторам производительности tqdm? Спасибо!
Измените запись "print" на "tqdm.write", поэтому ведение журнала не мешает индикаторам выполнения
Ответ 1
Вам нужен собственный обработчик регистрации:
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)
Редактировать: Исправлена ошибка в вызове супер инициализирующего метода TqdmLoggingHandler, на что указывал старательный читатель @BlaineRogers в комментариях. (Если кто-то захочет читать дальше об этой темной области Python, я рекомендую https://fuhm.net/super-harmful/)
Ответ 2
Не уверен, что вы пытаетесь сделать, но если вы используете:
import tqdm
вместо
from tqdm import tqdm
когда вы (или некоторые из ваших модулей) ставите
print
в вашей программе он не будет ссылаться на
tqdm.print
но оригинальная печать. У вас будет небольшое неудобство в том, что вам нужно будет ввести более позднюю инструкцию, если вы хотите увидеть индикатор выполнения.