这是一个简单的概念验证脚本
import logging
logging.basicConfig(level=logging.DEBUG)
logging.info('This is a test for info')
logging.error('This is a test for error')
print('This is a test for print')
sys.__stdout__ = None
sys.stdout = None
sys.__stderr__ = None
sys.stderr = None
logging.info('This is a test for info after setting stdout to None')
logging.error('This is a test for error after setting stderr to None')
print('This is a test for print after setting stdout to None')
输出为:
INFO:root:This is a test for info
ERROR:root:This is a test for error
This is a test for print
INFO:root:This is a test for info after setting stdout to None
ERROR:root:This is a test for error after setting stderr to None
正如您所看到的,将 stdout/stderr 设置为 None 后,
print
语句不会输出字符串。
但是日志模块如何仍然将字符串输出到终端,这背后有什么原因吗?
logging
模块独立于sys.stdout
和sys.stderr
输出消息,这就是为什么即使将日志消息设置为None
后仍然会出现。
默认情况下,日志记录使用自己的处理程序,因此要停止记录输出,您需要显式删除这些处理程序。
要停止记录消息,您需要删除日志记录处理程序。
for handler in logging.root.handlers[:]:
logging.root.removeHandler(handler)