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

监控多个目录的文件变化-使用watchdog.observers的方法

发布时间:2023-12-19 00:02:29

监控多个目录的文件变化可以使用watchdog库中的watchdog.observers.Observer方法。这个方法可以创建一个观察者对象,用来监控文件或目录的变化。

首先,需要安装watchdog库。可以使用pip命令来安装watchdog:

pip install watchdog

下面是一个使用watchdog.observers的例子,可以监控多个目录的文件变化:

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

# 继承FileSystemEventHandler类,并重写on_any_event方法
class MyHandler(FileSystemEventHandler):
    def on_any_event(self, event):
        if event.is_directory:
            # 目录的创建、删除事件
            if event.event_type == 'created':
                print(f"创建目录: {event.src_path}")
            elif event.event_type == 'deleted':
                print(f"删除目录: {event.src_path}")
        else:
            # 文件的创建、删除、修改事件
            if event.event_type == 'created':
                print(f"创建文件: {event.src_path}")
            elif event.event_type == 'deleted':
                print(f"删除文件: {event.src_path}")
            elif event.event_type == 'modified':
                print(f"修改文件: {event.src_path}")

if __name__ == "__main__":
    # 需要监控的目录列表
    folders_to_monitor = ["/path/to/folder1", "/path/to/folder2"]

    event_handler = MyHandler()
    observer = Observer()

    # 添加需要监控的目录
    for folder in folders_to_monitor:
        observer.schedule(event_handler, folder, recursive=True)

    observer.start()

    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

上面的代码定义了一个MyHandler类,继承自FileSystemEventHandler类,并重写了on_any_event方法。该方法根据事件类型输出相应的信息。

在主程序中,我们创建了一个Observer对象,并指定了要监控的目录列表。然后创建了一个MyHandler对象作为事件处理器,并将其与每个目录关联起来。最后,调用observer的start方法开始监控。

当有文件或目录发生变化时,on_any_event方法会被调用,并输出相应的信息。

请注意,由于监控是一个持续的过程,因此使用一个while循环来保持程序运行。当按下Ctrl+C时,程序会停止监控并退出。

这就是使用watchdog.observers监控多个目录的文件变化的方法,通过上述代码示例,你可以根据自己的需求进行修改和扩展。