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

使用Python中的watchdog.observers模块实现目录变化的通知

发布时间:2023-12-26 20:46:03

在Python中,可以使用watchdog.observers模块来实现目录变化的通知。watchdog是一个文件和目录监控库,它可以监控文件和目录的创建、修改、删除等操作,并且可以实时发送通知。

下面是一个使用watchdog.observers模块的例子,用于监控某个目录下文件的创建、修改和删除操作,并实时发送通知。

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

pip install watchdog

接下来,创建一个Python脚本文件,命名为directory_observer.py,并将以下代码添加到文件中:

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

class MyEventHandler(FileSystemEventHandler):
    def on_any_event(self, event):
        if event.is_directory:
            return

        event_type = None
        if event.event_type == 'created':
            event_type = "创建"
        elif event.event_type == 'modified':
            event_type = "修改"
        elif event.event_type == 'deleted':
            event_type = "删除"

        print(f"文件{event.src_path}被{event_type}了")

if __name__ == "__main__":
    # 监控的目录路径
    path = 'path/to/monitor'
    event_handler = MyEventHandler()
    observer = Observer()
    observer.schedule(event_handler, path, recursive=True)
    observer.start()

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

在上面的代码中,首先定义了一个继承自FileSystemEventHandler的自定义事件处理类MyEventHandler。然后,重写了on_any_event方法,在其中判断事件类型,并打印出事件发生的文件路径和操作类型。

在脚本的主程序中,首先设定需要监控的目录路径,然后创建一个MyEventHandler实例,并将其绑定到一个Observer对象上。

最后,通过调用observer.start()方法启动监控。在try-except块中,使用time.sleep(1)让主程序保持运行状态,当用户按下Ctrl+C时,触发KeyboardInterrupt异常,调用observer.stop()方法停止监控,然后调用observer.join()方法等待子线程结束。

为了演示上述代码的使用,可以创建一个新的目录,并在其中添加、修改或删除文件,然后观察运行脚本的控制台输出。

运行directory_observer.py脚本后,当目录下的文件被创建、修改或删除时,会在控制台输出类似如下的信息:

文件path/to/monitor/test.txt被创建了
文件path/to/monitor/test.txt被修改了
文件path/to/monitor/test.txt被删除了

这样,就可以通过watchdog.observers模块实现目录变化的通知。