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):
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):
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):
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):
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()
event_handler = FileEventHandler()
path = r"F:\Python\test"
observer.schedule(event_handler, path, True)
print(f"监控目录{path}")
observer.start()
observer.join()
运维中以下场景十分适合使用watchdog:
(1)监控文件系统中文件或目录的增、删、改情况。
(2)当特定的文件被创建、删除、修改、移动时执行相应的任务。