Python 日志模块输出到屏幕延迟

标签 python logging stdout

在我的 python 脚本中,我使用日志记录模块,其中 INFO 会转到文件和屏幕:

fh_info = logging.FileHandler(info)
fh_info.setLevel(logging.INFO)
fh_info.setFormatter(formatter)

std_out_info = logging.StreamHandler()
std_out_info.setLevel(logging.INFO)

logger.addHandler(fh_info)
logger.addHandler(std_out_info)

但我遇到的问题是,消息在函数完成后到达屏幕。例如,在:

def getToken(self):
    msg = ("Initializing token....")
    logger.info(msg)
    sys.stdout.flush()
    try:
        jsonreq = ( {"auth": {"KEY:apiKeyCredentials": {
            "username": self.username,
            "apiKey": self.apikey}}})
        auth_headers = {'content-type': 'application/json'}
        r = requests.post(self.url, data=json.dumps(jsonreq), headers=auth_headers)
        self.jsonresp = json.loads(r.text)
        self.token = str(self.jsonresp['access']['token']['id'])
        msg = ("done!")
        logger.info(msg)
    except:
        msg = ("Bad name or apikey!")
        logger.error(msg)
        sys.exit()

函数中的操作完成后,屏幕上将显示消息“Initializing token....”。当身份验证正在进行时,会出现长时间的暂停,没有输出......然后身份验证完成后,我看到“初始化 token ......完成”。

如何使 logger.info(msg) 与脚本流程保持同步并及时输出到屏幕?

最佳答案

您没有使用 sys.stdout 初始化 StreamHandler,因此它将使用记录的默认值 - sys.stderr。这就是为什么您的 sys.stdout 刷新没有任何效果 - 您发布的代码没有任何内容导致写入 sys.stdout!

关于Python 日志模块输出到屏幕延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20199557/

相关文章:

java - 使用 Camel Rest 时如何记录请求负载?

C 编程 - freopen 附加一个 ?到文件名

python - 背景图片未显示在 Django 网站上

python - 将一组函数作为参数传递给 Python 中的另一个函数

php - 如何监控MySQL查询

visual-studio-2008 - Visual Studio 2008 崩溃日志在哪里?

python - 如何在 Python 中获取标准输出的硬标签

powershell - 在 powershell 中对 `docker ps` 的输出进行排序,同时将表头保持在顶部

python - 使用 Python 请求响应原始文件类对象(处理 pcap 文件而不将其保存到磁盘)

python - Pytest,如何在C盘以外的不同位置创建临时驱动器: Windows