如何用WatchDog库实现的文件系统监控?
摘要:Watchdog库是Python中一个用于监控文件系统变化的第三方库。它能够实时监测文件或目录的创建、修改、删除等操作,并在这些事件发生时触发相应的处理逻辑,因此也被称为文件看门狗。 Watchdog库的官方仓库见:watchdog,Wat
Watchdog库是Python中一个用于监控文件系统变化的第三方库。它能够实时监测文件或目录的创建、修改、删除等操作,并在这些事件发生时触发相应的处理逻辑,因此也被称为文件看门狗。
Watchdog库的官方仓库见:watchdog,Watchdog库的官方文档见:watchdog-doc。Watchdog库的安装命令如下:
python -m pip install -U watchdog
注意:Watchdog库最新版本(2.1.5以上版本)需在Python3.9以上版本运行。若使用Python3.4或3.5,应选用Watchdog版本低于1.0.0;若使用Python3.6至3.8,应选用Watchdog版本低于2.0.0。
目录1 使用示例2 参考
1 使用示例
基础示例
以下示例程序将以递归方式监控指定目录及其子文件夹中文件系统的变化情况,包括文件或文件夹的创建、修改、移动、删除,并将这些变化记录到控制台中:
import sys
# 导入logging模块,用于记录程序运行时的日志信息
import logging
# 从watchdog.observers模块中导入Observer类,用于监控文件系统的变化
from watchdog.observers import Observer
# 从watchdog.events模块中导入LoggingEventHandler类,用于处理文件系统事件并记录日志
from watchdog.events import LoggingEventHandler
if __name__ == "__main__":
# 配置日志记录的基本设置
# level=logging.INFO表示只记录INFO级别及以上的日志信息
# format='%(asctime)s - %(message)s'指定日志的输出格式,包含时间戳和日志消息
# datefmt='%Y-%m-%d %H:%M:%S'指定时间戳的格式
logging.basicConfig(level=logging.INFO,
format='%(asctime)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S')
# 指定要监控的文件夹路径,该文件夹必须存在
path = "demo_folder"
# 创建一个LoggingEventHandler对象,用于处理文件系统事件并记录日志
event_handler = LoggingEventHandler()
# 创建一个Observer对象,用于监控文件系统的变化
observer = Observer()
# 安排观察者监控指定路径下的文件系统事件
# event_handler是事件处理程序
# path是要监控的路径
# recursive=True表示递归监控该路径下的所有子文件夹
observer.schedule(event_handler, path, recursive=True)
# 启动观察者,开始监控文件系统的变化
observer.start()
try:
# 当观察者处于活动状态时,持续循环
while observer.is_alive():
# 等待1秒,让观察者有时间处理文件系统事件
observer.join(1)
finally:
# 停止观察者,结束文件系统的监控
observer.stop()
# 等待观察者线程结束
observer.join()
Watchdog事件类介绍
Watchdog库提供了一系列事件类,用于监控文件系统的各种变化,这些变化包括:
创建事件on_create:涵盖文件和文件夹的创建情况,当有新的文件或者文件夹在监控路径下生成时触发相应事件。
删除事件on_delete:当文件或者文件夹被从监控路径中移除时触发,分别有针对文件和文件夹的不同事件类。
修改事件on_modified:文件夹内新增、删除文件或子文件夹等内容变化时触发文件夹修改事件。
移动 / 重命名事件on_moved:文件或文件夹的位置发生移动,或者名称被更改时触发相应事件,该事件会记录原路径和新路径。
