You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python TimedRotatingFileHandler在Windows下无法重命名日志文件问题

问题:PyInstaller打包的Click CLI工具日志轮转触发权限错误

场景与现象

  • 使用Click库开发Python CLI工具,通过PyInstaller打包为Windows可执行文件
  • 日志组件采用TimedRotatingFileHandler,日志文件路径为%USER%\AppData\Local\Temp\some_folder\logs\app.log,配置为每日午夜轮转、保留7份备份
  • 首次运行命令时,日志创建与写入均正常;次日运行命令触发日志轮转逻辑时,出现权限错误:
PermissionError: [WinError32] The process cannot access the file because it is being used by another process
'C:\Users\SOME_USER\AppData\Local\Temp\SOME_FOLDER\logs\app.log' -> 'C:\Users\SOME_USER\AppData\Local\Temp\SOME_FOLDER\logs\app.log.2025-03-03'
  • 确认用户不会并发执行该CLI命令,理论上应为单进程运行

疑惑点

  • PyInstaller是否会导致日志文件句柄未被正确释放?
  • Click框架是否存在导致文件句柄泄漏的情况?
  • 是否需要在CLI命令执行完毕后手动清理日志处理器?

日志实现代码

logger = logging.getLogger(name)
logger.setLevel(logging.DEBUG)
path = pathlib.Path.home() / filename
file_handler = logging.handlers.TimedRotatingFileHandler(path, when="midnight", interval=1, backupCount=7)
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(logging.Formatter(LOG_FORMATTER))
logger.addHandler(file_handler)

补充测试信息

在未打包的Python测试环境中,手动修改日志文件的最后修改时间后,日志轮转(重命名操作)可正常执行;但打包为exe后执行同样操作会触发上述权限错误。

内容的提问来源于stack exchange,提问作者d4vid_Bry4n

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 03:04:58