设置一个作为 tee 命令工作的记录器

问题描述 投票:0回答:0

我想设置一个作为 tee 命令工作的记录器。本质上,我想设置一个记录器,将控制台输出记录到一个文件中,同时在控制台中显示它们。

我传递日志文件的路径

log_file_path
,它会将所有控制台输出记录到该文件,同时还会在控制台中显示控制台输出。请注意,我在我的代码中使用了 TQDM,因此它也应该处理它们的输出。我希望在日志文件中看到 TQDM 的准确输出。另外,如果可能的话,我不希望日志文件有几行用于相同的 TQDM 迭代。

我已经有了这个:

import sys


class TeeLogger(object):
    def __init__(self, *files):
        self.files = files

    def write(self, obj):
        for file in self.files:
            file.write(obj)
            file.flush()

    def flush(self):
        for file in self.files:
            file.flush()


def setup_logger(log_file_path):
    log_file = open(log_file_path, 'w')
    sys.stdout = TeeLogger(sys.stdout, log_file)

但是 tqdm 输出没有出现在日志文件中。我也尝试过重定向 sys.sterr,但这总是会破坏控制台中的 tqdm 输出。我希望 tqdm 输出保持正常。

python logging progress-bar tqdm tee
© www.soinside.com 2019 - 2024. All rights reserved.