使用python时刻中监控文件夹,记录文件夹中文件异常信息

171 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第21天,点击查看活动详情

watchdog库简述

Watchdog是一款用于监控文件系统事件的Python库,Watchdog优先使用底层原生API,其次再通过轮询磁盘实现监控,支持多平台操作系统;使用watchdog时,当被监视的区域发生文件或目录的创建,修改,或者删除时,就可以引发特定的事件,我们只需要编写针对这些事件的函数即可处理这些变化。

python版本支持 3.5+

官方网站地址:pythonhosted.org/watchdog/

扩展知识:

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:

    官网地址:pypi.org/project/pip…; 下载完毕后,解压

  • 打开命令行窗口,进入到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;