对 FileHandler 使用 mode='w' 参数时,记录到 python 文件不会覆盖文件

Cia*_*lsh 10 python logging

我有一些代码可以在 Python 2.7 中设置日志(使用日志模块):

import os
import logging
logger=logging.getLogger('CopasiTools')
logger.setLevel(logging.DEBUG)
log_filename=os.path.join(os.path.dirname(copasi_file),os.path.split(copasi_file)[1][:-4]+'_log.log')
handler=logging.FileHandler(log_filename,mode='w')
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.debug('debugging message')
Run Code Online (Sandbox Code Playgroud)

此代码有效并且我正在获取输出,但是我打算使用此日志进行大量调试,因此我想在每次运行时覆盖日志文件。在文档中说使用mode'FileHandler . It doesn't specify precisely *which* mode to use for overwrite file each time but I think a reasonable assumption would bemode='w'`的关键字参数。然而这行不通。谁能告诉我为什么?

Nut*_*ker 12

这为我解决了问题:

handler = logging.FileHandler(log_filename, 'w+')
Run Code Online (Sandbox Code Playgroud)


Cia*_*lsh 7

问题是在启动新的 python shell 之前,文件实际上不会被覆盖。


小智 5

我对此不太熟悉,而且我并没有真正在谷歌中看到任何突出的内容。您是否尝试过仅使用:

    handler=logging.FileHandler(log_filename, 'w')
Run Code Online (Sandbox Code Playgroud)