当我尝试使用print
和控制台记录器显示消息时,发现以下令人惊讶的行为:
import logging
for i in range(1, 10):
print("Hello")
logging.warning("Hello world")
# Possible result:
Hello
WARNING:root:Hello world
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
# Expected result:
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
WARNING:root:Hello world
这怎么可能呢?返回日志之前,记录器(无论是文件还是控制台)不应该保证写入其输出流吗?
线程
并在主循环之外工作。 启动两个线程(主循环+记录)以获取可能的输出。 - dsgdfgprint()
都刷新stdout
,这似乎能改善情况。但仍然有很多时候,在日志输出之后执行的print()
输出之后显示日志输出。我无法相信在 Python 中没有相对简单的方法来配置记录器与print()
同步。 - Michael Burr