一种场景:python开发中使用logging库记录日志信息。在程序结束前需要将日志转存到一个备份存储并删除现有日志。但是删除日志时通常会报错,错误如下:

python.exe test.py
Traceback (most recent call last):File "C:/Users/sunday/Desktop/test/test.py", line 58, in <module>os.remove(log_file)
PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。: 'C:\\Users\\sunday\\Desktop\\test\\test.log'

无法删除的原因就是logging没有释放日志文件的句柄,造成没权限删除。这时候logging库的shutdown就派上用场。查看shutdown源码可以看到shutdown就是用于程序退出前被使用。

def shutdown(handlerList=_handlerList):"""Perform any cleanup actions in the logging system (e.g. flushingbuffers).Should be called at application exit."""for wr in reversed(handlerList[:]):#errors might occur, for example, if files are locked#we just ignore them if raiseExceptions is not settry:h = wr()if h:try:h.acquire()h.flush()h.close()except (OSError, ValueError):# Ignore errors which might be caused# because handlers have been closed but# references to them are still around at# application exit.passfinally:h.release()except: # ignore everything, as we're shutting downif raiseExceptions:raise#else, swallow#Let's try and shutdown automatically on application exit...
import atexit
atexit.register(shutdown)

删除日志文件前加上shutdown,完美退出。


logging.shutdown()
os.remove(log_file)执行:
python.exe test.py进程已结束,退出代码 0

python3 logging 句柄释放 shutdown 简介相关推荐

  1. python3 socket shutdown 简介

    如果要表示输出数据已经结束,则可以通过关闭 socket 来实现.但如果彻底关闭了 socket,则会导致程序无法再从该 socket 中读取数据. 在这种情况下,socket 提供了一个 shutd ...

  2. python3 logging模块_Python3之logging模块浅析

    Python3之logging模块浅析 很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可 ...

  3. python3 logging输出到文件_python3:logging模块 输出日志到文件

    python自动化测试脚本运行后,想要将日志保存到某个特定文件,使用python的logging模块实现 参考代码: importloggingdefinitLogging(logFilename,e ...

  4. Python3.x:第三方库简介

    环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. v ...

  5. oracle中句柄,释放句柄 – 提供7*24专业数据库(Oracle,SQL Server,MySQL等)恢复和Oracle技术服务@Tel:+86 13429648788 - 惜分飞...

    在很多时候,检查系统时候发现,由于某个Oracle的trace文件导致磁盘空间告警,因为业务需要不能让数据库down下来.这个时候你想到的方法可能是直接删除掉这个trace文件,如果是win系统,那恭 ...

  6. python3 自动化交互模块 pexpect 简介

    背景介绍 Expect 程序主要用于人机对话的模拟,就是那种系统提问,人来回答 yes/no ,或者账号登录输入用户名和密码等等的情况.因为这种情况特别多而且繁琐,所以很多语言都有各种自己的实现.最初 ...

  7. python3 logging模块

    很多程序都有记录日志的需求,并且日志包含的信息有正常的程序访问日志还可能有错误,警告等信息输出,python的logging模块提供了标准的日志接口,可以通过它存储各种格式的日志,日志级别等级:cri ...

  8. python3 logging com1_python-logging-基础(1)

    在执行用例的时候,往往会遇到各种问题,遇到问题后很难去定位 import logging class Logs: def __init__(self,filepath,name): #self.nam ...

  9. python3 logging模块_python3中使用logging模块写日志,中文乱码,如何解决?

    创建filehandler的时候指定编码为utf-8,可以参考handler的构造方法: https://docs.python.org/3.6/l... 如果是使用配置文件,也可以在配置文件的han ...

最新文章

  1. 前端一HTML:四: html标签
  2. 济南学习 Day2 T2 am
  3. JSON.NET 简单的使用
  4. 神奇的事情,不同进程监听同一个端口,居然都成功
  5. js html utf8编码转换,js中的UTF-8编码与解码
  6. 从入门到入土:基于C语言采用TCP协议实现通信功能的程序(仅有代码)
  7. 图像处理之局部二值特征
  8. c语言画bode图程序,根据上位机测得的Bode图的幅频特性,就能确定系统(或环节)的相频特性,试问这在什么系统时才能实现?...
  9. 2pin接口耳机_让耳机“轻松一下”—— QDC BTX(耳机蓝牙线)
  10. win7下如何显示缅文和使用缅文输入法?
  11. PS2021中使用Nik插件崩溃闪退|Nik Collection不兼容cc2021闪退的解决方法
  12. 【办公-WORD】Word 背景颜色层次分析
  13. chrome主页篡改修复
  14. flac格式转mp3
  15. PostgreSQL—适合金融的数据库
  16. qq复读机java脚本分享蓝奏云_蓝奏云资源,各种软件分享链接,干货
  17. 思想一年一年进步才好
  18. sqlserver 2012 序列号
  19. echarts实现某个市3D地图展示
  20. 元旦倒计时(JS计时器)

热门文章

  1. 微软宣布将于08年发布Centro服务器软件
  2. 百度“既盗版又盗链”,不但是音乐公司的害虫,也是音乐网站的害虫
  3. python中http_Python中HTTP协议
  4. 4G EPS 中的 User Plane
  5. Keepalived + LVS-NAT 实现高可用四层 TCP/UDP 负载均衡器
  6. OpenStack Placement Project(Rocky to Train)
  7. 理想ONE“偷袭”豪华品牌 李想强调不会收取金融服务费 | 2019上海车展
  8. 北恒生物获德诚资本约1亿元A轮融资,德诚资本投资
  9. SSM整合Shiro 身份验证及密码加密简单实现
  10. 《树莓派渗透测试实战》——总结