Mam proste pytanie: Jak zmienić wbudowaną funkcję rejestratora Pythona print
na tqdm.write
w taki sposób, że komunikaty rejestrowania nie zakłócać paski postępu tqdm? Dzięki!Zmień funkcję "drukowania" rejestru na "tqdm.write", aby rejestrowanie nie zakłócało pasków postępu.
Zmień funkcję "drukowania" rejestru na "tqdm.write", aby rejestrowanie nie zakłócało pasków postępu.
Odpowiedz
Trzeba klasę obsługi rejestrowania:
import logging
import tqdm
class TqdmLoggingHandler (logging.Handler):
def __init__ (self, level = logging.NOTSET):
super (self.__class__, self).__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)
a następnie dodać do łańcucha rejestrowania:
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)
Nie jestem pewien, co chce zrobić, ale jeśli używasz:
import tqdm
zamiast
from tqdm import tqdm
kiedy (lub niektóre z modułów) umieścić
print
w twoim programie nie będzie się odwoływać do
tqdm.print
ale oryginalny nadruk. Będziesz miał małe niedogodności związane z koniecznością wpisywania późniejszych instrukcji, gdy chcesz zobaczyć pasek postępu.
Wbudowany rejestrator pojawi Python na używanie 'print'. Wpływa to na tqdm. Chcę, żeby rejestrator nie * używał * print, ale tqdm.write. – Guillochon
Moja sugestia polega na użyciu tqdm.print w razie potrzeby, aby uniknąć tych interferencji. – fernand0
Nie rozumiesz. Wbudowany rejestrator Pythona przeszkadza, np. 'log.warn (" wiadomość tutaj ")'. – Guillochon
Idealny! Dzięki! – Guillochon
Potrzebowałem czegoś do użycia modułu logowania dla wyjścia, rozwiązanego w następujący sposób: http://stackoverflow.com/a/41224909/638504. Wynik jest następujący: '2016-12-19 15:35:06 [INFO] 16% | ##### 9 | 768/4928 [07:04 <40:50, 1.70it/s] ' – ddofborg
ważne jest użycie' import tqdm' not' z tqdm import tqdm' inaczej IO przerwie pasek postępu –