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

使用watchdog.observers在Python中实现精确的文件和目录监视

发布时间:2023-12-26 20:44:52

watchdog.observers 是 watchdog 库中的一个模块,用于监视文件和目录的变化,并在变化发生时触发事件。它可以用于实现实时文件同步、自动化构建系统、实时日志监视等功能。

首先,我们需要安装 watchdog 库。可以通过 pip 命令进行安装:

pip install watchdog

以下是一个使用 watchdog.observers 监视文件和目录变化的示例:

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


class MyHandler(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__":
    path = "."  # 监视的文件或目录路径

    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()

以上代码创建了一个自定义的 FileSystemEventHandler 类,用于处理不同类型的文件和目录变化事件。on_created 方法在文件或目录被创建时触发,on_modified 方法在文件或目录被修改时触发,on_deleted 方法在文件或目录被删除时触发。

__main__ 方法中,我们指定了要监视的路径,创建了一个 MyHandler 对象,并将其与一个 Observer 对象关联。然后,我们启动了观察器并使用 try-except 块来确保能够优雅地停止观察器。最后,我们使用 observer.join() 方法等待观察器停止。

通过运行以上代码,你将能够监视指定路径下的文件和目录的变化,并在变化发生时打印出相应的信息。

为了实现更精确的监视,你可以根据自己的需求进一步定制事件处理程序 MyHandler 中的方法。你可以删除不需要的事件处理方法,或者添加其他事件处理方法来响应更多类型的事件。

总之,watchdog.observers 提供了一个简单且灵活的方式来实现文件和目录的监视,并能够方便地集成到你的应用程序中,以便在文件或目录发生变化时执行相应的操作。