欢迎访问宙启技术站
智能推送

使用watchdog.observers实时监控文件系统

发布时间:2023-12-19 00:01:46

watchdog是一个用于文件和文件夹监控的Python库。可以通过watchdog实时监控文件系统的变化,例如文件的添加、修改、删除等。它可以用于自动化任务、日志监控、文件同步等场景。

watchdog.observers模块提供了一个Observer类,用于监控文件系统的变化。下面是一个使用watchdog.observers实时监控文件系统的例子:

from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

class MyEventHandler(FileSystemEventHandler):
    def on_created(self, event):
        if event.is_directory:
            print(f"Directory created: {event.src_path}")
        else:
            print(f"File created: {event.src_path}")

    def on_modified(self, event):
        if event.is_directory:
            print(f"Directory modified: {event.src_path}")
        else:
            print(f"File modified: {event.src_path}")

    def on_deleted(self, event):
        if event.is_directory:
            print(f"Directory deleted: {event.src_path}")
        else:
            print(f"File deleted: {event.src_path}")

if __name__ == "__main__":
    event_handler = MyEventHandler()
    observer = Observer()
    observer.schedule(event_handler, path='.', recursive=True)

    observer.start()
    try:
        while True:
            pass
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

在上面的例子中,我们定义了一个MyEventHandler类,继承自FileSystemEventHandler。在MyEventHandler中,我们重写了on_created、on_modified和on_deleted方法,分别用于处理文件或文件夹的创建、修改和删除事件。

在主函数中,我们首先创建了一个MyEventHandler实例和一个Observer实例。然后,通过调用observer.schedule方法,将event_handler和监控的路径传入,同时设置recursive=True以递归地监控子文件夹。接着,调用observer.start方法启动监控。

在主函数的while循环中,我们可以添加自定义的业务逻辑,实时处理文件系统的变化。在这个例子中,我们只是简单地用print语句输出了文件或文件夹的创建、修改和删除事件。

最后,在捕捉到KeyboardInterrupt(Ctrl+C)时,我们通过调用observer.stop方法停止监控,并调用observer.join方法等待所有线程退出。

这个例子实现了一个简单的实时监控文件系统变化的程序。你可以在这个基础上进行扩展,实现更复杂的功能,例如根据文件的修改时间自动执行某个任务、监控指定文件的变化并进行相应的处理等。