watchdog库简述
Watchdog是一款用于监控文件系统事件的Python库,Watchdog优先使用底层原生API,其次再通过轮询磁盘实现监控,支持多平台操作系统;使用watchdog时,当被监视的区域发生文件或目录的创建,修改,或者删除时,就可以引发特定的事件,我们只需要编写针对这些事件的函数即可处理这些变化。python版本支持 3.5+
扩展知识:
watchdog翻译为看门狗。看门狗是一个概念,单片机和linux中也都有watchdog的应用,例如Linux 自带了一个 watchdog 的实现,用于监视系统的运行,包括一个内核 watchdog module 和一个用户空间的 watchdog 程序。
watchdog是一个python的第三方库,使用前需要进行安装;
安装watchdog
安装方式推荐有很多种,推荐使用pip;
pip 是 Python 的包安装程序。其实,pip 就是 Python 标准库(The Python Standard Library)中的一个包,只是这个包比较特殊,用它可以来管理 Python 标准库(The Python Standard Library)中其他的包。pip 是一个命令行程序。 安装 pip 后,会向系统添加一个 pip 命令,该命令可以从命令提示符运行。
安装pip:
- 安装python; 这个是必须安装的;
下载pip:
> 官网地址:https://pypi.org/project/pip/#downloads; 下载完毕后,解压
打开命令行窗口,进入到pip解压后的目录;执行代码
python3 setup.py install
进行安装,
安装完成后,将pip加入到系统环境变量中
- 验证
打开命令行窗口,输入pip list 或者pip3 list
以上只针对于windows系统,其他系统也可以参考;
pip安装完成后,就可以使用pip安装watchdog:
打开命令行窗口,输入执行以下代码,并回车pip install watchdog
等待提示安装成功既可;
使用watchdog实现一个记录文件夹文件操作的日志
代码实现:
导入watchdog:
import watchdog
记录日志,需要一个日志库logging,
导入 import logging
- 首先定义一个日志处理器:
from watchdog import events,
class loghendler(events.LoggingEventHandler):
def on_created(self, event):
super().on_created(event)
name =event.src_path.split('.')
if name[-1] == 'mp4':
logging.info('filename: %s',event.src_path)
sleep(3)
os.remove(event.src_path)
日志处理器继承watchdog的事件处理器events.LoggingEventHandler
重写on_created方法,文件被创建时触发;
- 创建监控对象,
from watchdog import observers
#配置输出日志
logging.basicConfig(level=logging.INFO,
format='%(asctime)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S')
path = 'H:/sounds'
#定义一个事件处理器
#handler_file = events.LoggingEventHandler()
handler_file = loghendler()
#实例化一个监控对象
ob = observers.Observer()
ob.schedule(handler_file,path,recursive=True)
#启动一个线程运行监控
ob.start()
while 1:
sleep(1)
配置日志输出格式,实例化一个监控对象observers;启动一个线程来监控;
watchdog主要采用观察者模型。主要机制是,observer不断检测调用平台依赖代码对监控文件夹进行变动检测,当发现改变时,通知event_handler处理。
里面主要的三个参与者:文件夹,观察者observer和event_hander;