Python中利用watchdog.observersObserver()监控目录变化
发布时间:2024-01-10 15:16:33
watchdog 是一个 Python 库,用于监控文件系统中的文件或目录的变化。它具有轻量级、跨平台的特点,并且可以与其他 Python 库、框架或工具集成,提供实时的文件系统事件通知。
使用 watchdog 库来监控目录变化,首先需要创建一个 Observer 对象。Observer 对象可以监视一个或多个目录,以及目录中的文件和子目录。
下面是一个示例,演示了如何使用 watchdog 来监控一个目录,并输出相应的文件变化事件。
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class MyHandler(FileSystemEventHandler):
def on_modified(self, event):
if not event.is_directory:
print(f"File {event.src_path} was modified")
def on_created(self, event):
if not event.is_directory:
print(f"File {event.src_path} was created")
def on_deleted(self, event):
if not event.is_directory:
print(f"File {event.src_path} was deleted")
def on_moved(self, event):
if not event.is_directory:
print(f"File {event.src_path} was moved to {event.dest_path}")
if __name__ == "__main__":
path = "/path/to/directory" # 监控的目录路径
event_handler = MyHandler()
observer = Observer()
observer.schedule(event_handler, path, recursive=True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
在这个例子中,我们定义了一个名为 MyHandler 的类,继承自 FileSystemEventHandler。通过重写 on_modified、on_created、on_deleted 和 on_moved 方法,我们可以在文件系统中发生相应的事件时,触发相应的回调函数。这些回调函数以 event 参数,表示文件变化的相关信息。
然后,我们创建了一个 Observer 对象和一个 MyHandler 对象,并将它们绑定在一起。通过调用 Observer 对象的 start 方法,开始监视指定的目录。recursive=True 参数表示递归地监视目录中的所有子目录。
最后,我们使用 try-except 块来捕获键盘中断信号,并在程序退出时停止监视。
通过运行以上代码,可以监控指定目录中的文件变化。当有文件被修改、创建、删除或移动时,相应的事件信息将会被打印出来。
注意:为了运行以上代码,需要先安装 watchdog 库,可以使用 pip install watchdog 命令进行安装。
