2016-07-23 14 views

Antwort

8

Sie benötigen einen benutzerdefinierten Protokollhandler:

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)   

und dann diese Kette an der Protokollierung hinzufügen:

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

Perfekt! Vielen Dank! – Guillochon

+0

Ich brauchte etwas Logging-Modul für die Ausgabe verwenden, löste es so: http://stackoverflow.com/a/41224909/638504. Die Ausgabe ist wie folgt: '2016-12-19 15:35:06 [INFO] 16% | ##### 9 | 768/4928 [07:04 <40:50, 1.70it/s] ' – ddofborg

+0

ist es wichtig,' import tqdm' nicht 'von tqdm import tqdm' zu verwenden, da sonst der IO den Fortschrittsbalken unterbricht –

-4

Nicht sicher, was Sie versuchen zu tun, aber wenn Sie verwenden:

import tqdm 

statt

from tqdm import tqdm 

, wenn Sie (oder einige Ihrer Module) setzen

print 

in Ihrem Programm wird es sich nicht auf

beziehen
tqdm.print 

aber das Original drucken. Sie werden die kleine Unbequemlichkeit haben, die spätere Anweisung einzugeben, wenn Sie eine Fortschrittsleiste sehen möchten.

+0

Den integrierte Python-Logger erscheint 'print' zu verwenden. Dies stört tqdm. Ich möchte, dass der Logger * nicht * druckt, sondern tqdm.write. – Guillochon

+0

Mein Vorschlag ist, tqdm.print bei Bedarf zu verwenden, um diese Interferenz zu vermeiden. – fernand0

+0

Sie verstehen nicht. Der integrierte Python-Logger ist störend, z.B. 'log.warn (" Nachricht hier ")'. – Guillochon