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

使用watchdog.observersObserver()实时监控指定目录下的文件夹变化

发布时间:2024-01-10 15:24:22

使用watchdog库的Observer类可以创建一个观察者对象,用于实时监控指定目录下的文件夹变化。观察者对象可以注册一个或多个处理程序,用于在文件夹发生变化时执行相应的操作。

以下是一个使用Observer实现实时监控指定目录的例子:

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

class MyHandler(FileSystemEventHandler):
    def on_any_event(self, event):
        # 文件夹发生变化时执行的操作
        print(f"{event.event_type}: {event.src_path}")

if __name__ == "__main__":
    # 指定要监控的目录
    path = "path_to_directory"

    # 创建观察者对象
    observer = Observer()

    # 实例化处理程序
    handler = MyHandler()

    # 将处理程序添加到观察者对象
    observer.schedule(handler, path, recursive=True)

    # 启动观察者对象
    observer.start()

    try:
        while True:
            # 持续监控目录的变化
            time.sleep(1)
    except KeyboardInterrupt:
        # 按下Ctrl+C停止观察者对象
        observer.stop()

    # 等待观察者对象停止
    observer.join()

在上述例子中,我们定义了一个MyHandler类,继承自FileSystemEventHandler。在MyHandler类中,我们重写了on_any_event方法,在文件夹发生变化时执行相应的操作。可以根据需要自定义MyHandler类,重写其他的方法来处理特定类型的事件,比如on_created处理文件创建事件,on_modified处理文件修改事件等。

if __name__ == "__main__":代码块中,我们指定了要监控的目录路径,创建了一个观察者对象,并实例化了MyHandler处理程序。然后将处理程序添加到观察者对象中,并通过observer.schedule方法指定要监控的目录以及递归地监控子目录。

接着,我们通过observer.start()方法启动观察者对象,并在一个无限循环中持续监控目录的变化。在按下Ctrl+C时,通过observer.stop()方法停止观察者对象。

最后,我们通过observer.join()方法等待观察者对象停止。

通过以上代码,我们可以实时监控指定目录下的文件夹变化,并根据需要执行相应的操作。