我解決了它這樣的:
import logging
import time
from tqdm import tqdm
import io
class TqdmToLogger(io.StringIO):
"""
Output stream for TQDM which will output to logger module instead of
the StdOut.
"""
logger = None
level = None
buf = ''
def __init__(self,logger,level=None):
super(TqdmToLogger, self).__init__()
self.logger = logger
self.level = level or logging.INFO
def write(self,buf):
self.buf = buf.strip('\r\n\t ')
def flush(self):
self.logger.log(self.level, self.buf)
if __name__ == "__main__":
logging.basicConfig(format='%(asctime)s [%(levelname)-8s] %(message)s')
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
tqdm_out = TqdmToLogger(logger,level=logging.INFO)
for x in tqdm(range(100),file=tqdm_out,mininterval=30,):
time.sleep(.5)
輸出
2016-12-19 15:35:06 [INFO ] 16%|#####9 | 768/4928 [07:04<40:50, 1.70it/s]
2016-12-19 15:36:07 [INFO ] 18%|######6 | 865/4928 [08:04<40:34, 1.67it/s]
使用「打印」的問題是,它將每個值都拋出一個新行,不再使輸出成爲進度條。 STDOUT應該刷新緩衝區並覆蓋現有的行,但在代碼中使用它時,這似乎不起作用。請注意,我並未在進度條代碼中包裝任何日誌模塊語法。 – 2013-02-15 15:38:53
使用上面發佈的確切代碼,我看到輸出被替換。你是否在新行上看到每個號碼? – jknupp 2013-02-15 16:16:31