Python文件系统监控
来自CloudWiki
实训背景
运维工作离不开文件系统的监控,如某个目录被删除,或者某个文件被修改、移动、删除时需要执行一定的操作或发出报警。当然,读者可能会想到使用循环检查文件或目录的信息来满足上述需求,也不是不可以,但这不是一个最好的方案,一是因为循环操作会不停地执行指令太耗CPU,二是不够实时,循环操作中会放一些等待指令,如time.sleep(3)来减少CPU的消耗,这就会导致监控的时机有一定的滞后,不够实时。本节介绍一个第三方库watchdog来实现文件系统监控,其原理是通过操作系统的事件触发的,不需要循环,也不需要等待。
watchdog介绍
watchdog用来监控指定目录/文件的变化,如添加删除文件或目录、修改文件内容、重命名文件或目录等,每种变化都会产生一个事件,且有一个特定的事件类与之对应,然后通过事件处理类来处理对应的事件
watchdog安装
pip3 install watchdog
运行实例
from watchdog.observers import Observer from watchdog.events import * import time class FileEventHandler(FileSystemEventHandler): def __init__(self): FileSystemEventHandler.__init__(self) def on_moved(self, event): super(FileEventHandler, self).on_moved(event) now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) if event.is_directory: print(f"{ now } 文件夹由 { event.src_path } 移动至 { event.dest_path }") else: print(f"{ now } 文件由 { event.src_path } 移动至 { event.dest_path }") def on_created(self, event): super(FileEventHandler, self).on_created(event) now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) if event.is_directory: print(f"{ now } 文件夹 { event.src_path } 创建") else: print(f"{ now } 文件 { event.src_path } 创建") def on_deleted(self, event): super(FileEventHandler, self).on_deleted(event) now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) if event.is_directory: print(f"{ now } 文件夹 { event.src_path } 删除") else: print(f"{ now } 文件 { event.src_path } 删除") def on_modified(self, event): super(FileEventHandler, self).on_modified(event) now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) if event.is_directory: print(f"{ now } 文件夹 { event.src_path } 修改") else: print(f"{ now } 文件 { event.src_path } 修改") if __name__ == "__main__": observer = Observer() path = r"d:\tttt" event_handler = FileEventHandler() observer.schedule(event_handler, path, True) print(f"监控目录 {path}") observer.start() observer.join()
输出:
监控目录 d:\tttt 2020-01-17 09:28:55 文件 d:\tttt\新建文本文档.txt 创建 2020-01-17 09:29:11 文件 d:\tttt\新建文本文档.txt 修改 2020-01-17 09:29:34 文件 d:\tttt\新建文本文档.txt 删除
运维场景中以下场合非常适合使用watchdog:
1)监控文件系统中文件或目录的增、删、改情况 (2)当特定的文件被创建、删除、修改、移动时执行相应的任务
思考:如何用watchdog模块来做一个安全保卫软件,如果系统文件被改变时,报警