簡體   English   中英

使 tqdm 寫入日志文件

[英]Making tqdm write to log files

tqdm是一個很好的 python 庫,用於跟蹤可迭代的進度。

它的默認操作模式是重復清除一條線並使用回車重新繪制,但與日志記錄結合使用時會產生非常討厭的 output。 有沒有辦法讓我定期將其寫入日志文件而不是使用此打印件?

這是我得到的最好的是我自己的 hacky 實現:

def my_tqdm(iterable):
    "Like tqdm but us logging. Include estimated time and time taken."
    start = time.time()
    for i, item in enumerate(iterable):
        elapsed = time.time() - start
        rate = elapsed / (i + 1)
        estimated = rate * len(iterable) - elapsed
        num_items = len(iterable)
        LOGGER.info(
            "Processed %d of %d items (%.1f%%) in %.1fs (%.1fs remaining, %.1f s/item)",
            i,
            num_items,
            i / num_items * 100,
            elapsed,
            estimated,
            rate,
        )
        yield item

但如果我能用 tqdm 本身來做這件事,這樣人們就不會在代碼審查中抱怨我,那就更好了。

您可以將 TQDM 進度條的輸出重定向到 null 設備(例如 /dev/null),並在需要時手動打印/記錄狀態欄 - 無論是在每次迭代時,還是在特定時間間隔。

例如:

import os
import time
import logging
from tqdm import tqdm

LOG_INTERVAL = 5

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger('tqdm_logger')
progress_bar = tqdm(range(20), file=open(os.devnull, 'w'))

for i in progress_bar:
    # do something meaningful instead...
    time.sleep(0.1)

    if progress_bar.n % LOG_INTERVAL == 0:
        logger.info(str(progress_bar))

此代碼塊將產生以下輸出:

INFO:tqdm_logger:  0%|          | 0/20 [00:00<?, ?it/s]
INFO:tqdm_logger: 25%|██▌       | 5/20 [00:00<00:01,  9.59it/s]
INFO:tqdm_logger: 50%|█████     | 10/20 [00:01<00:01,  9.54it/s]
INFO:tqdm_logger: 75%|███████▌  | 15/20 [00:01<00:00,  9.54it/s]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM