我正在为IDLE中的Python日志记录模块测试一些简单的日志记录示例:
import logging
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(levelname)s %(message)s', filename='TESTLOG.log')
logging.debug('A debug message')
它按预期工作:使用调试消息创建一个名为TESTLOG.log的文件。
但是如果我在IDLE脚本窗口打开时删除日志文件,当我尝试再次运行模块/ f5时,不会创建新的日志文件。如果我关闭脚本窗口然后重新打开并运行它,则会创建日志文件。
相反,如果我从命令行运行脚本,则在删除日志文件并重新运行脚本后,始终会生成日志文件。
这两种情况之间有什么区别?
答案 0 :(得分:2)
第一次调用basicConfig
时,会向Handler模块中的根记录器添加logging。对basicConfig
的后续调用检查根记录器中是否已存在处理程序,如果存在则调用basicConfig
无效(即不会重新创建日志文件)
如果打开IDLE窗口并运行脚本,则会加载日志记录模块,脚本会通过调用basicConfig
来配置根记录器。由于您随后不会关闭IDLE窗口,因此日志记录模块仍会加载,后续对basicConfig
的调用无效。
关闭并重新打开IDLE窗口会有效地激活一个新的python实例,并且必须重新加载日志记录模块,因此对basicConfig
的调用会产生影响。同样,每次运行脚本时,从命令行运行脚本都需要一个新的python实例。
答案 1 :(得分:0)
您没有说明您使用的操作系统,但我想这不是Windows,因为您无法删除Windows中的打开文件。在Linux上,可以删除打开的文件 ,但文件会一直挂起,直到它的所有打开句柄都已关闭,然后消失。这看起来与您所看到的一致:在IDLE情况下,只要IDLE正在运行,文件就会保持打开状态,因此即使您已将文件删除,该文件仍然存在,直到IDLE进程终止。对于脚本,它们每次都会终止,因此文件将被关闭,当您删除它时,它就会被删除。