2016-07-23 30 views

Odpowiedz

8

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) 
+0

Idealny! Dzięki! – Guillochon

+0

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

+0

ważne jest użycie' import tqdm' not' z tqdm import tqdm' inaczej IO przerwie pasek postępu –

-4

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.

+0

Wbudowany rejestrator pojawi Python na używanie 'print'. Wpływa to na tqdm. Chcę, żeby rejestrator nie * używał * print, ale tqdm.write. – Guillochon

+0

Moja sugestia polega na użyciu tqdm.print w razie potrzeby, aby uniknąć tych interferencji. – fernand0

+0

Nie rozumiesz. Wbudowany rejestrator Pythona przeszkadza, np. 'log.warn (" wiadomość tutaj ")'. – Guillochon