在不更改源代码的情况下在 stdout 上显示 INFO 级别 python 日志

Showing INFO-level python logs on stdout without changing source code

如果我无法更改其源代码的模块表示如下内容:

# foo.py
import logging

logging.info('Hello world')

如何在 运行

期间查看日志
$ python foo.py

来自我的 POSIX 兼容终端?

All the I can 这个涉及到改源码

The docs 非常清楚 WARN 级别及以上的日志记录:

The INFO message doesn’t appear because the default level is WARNING.

但我看不出如何更改默认设置。

运行 带有为您预先配置 logging 的咒语的脚本(现在 100% 更多 Python3 兼容)。

$ cat foo.py
import logging
logging.info('Hello world')

$ python3 -c 'import logging,sys,runpy;logging.basicConfig(level=logging.INFO,stream=sys.stdout);runpy.run_path("foo.py")'
INFO:root:Hello world
~/Desktop

不够难忘?

为了更令人难忘,您可以将内容包装在 please_log.py 中。需要一些 sys.argv 欺骗。

please_log.py

import logging, sys, runpy
script = sys.argv.pop(1)
logging.basicConfig(level=logging.INFO, stream=sys.stdout)
runpy.run_path(script)

foo.py

import logging
import sys

logging.info('Hello world: %s', sys.argv)

输出

$ python3 please_log.py foo.py
INFO:root:Hello world: ['foo.py']