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

Python中监听文件系统事件的FileSystemEventHandler()示例

发布时间:2023-12-27 03:16:12

Python中监听文件系统事件可以使用FileSystemEventHandler()类。FileSystemEventHandler()watchdog.events.FileSystemEventHandler模块中的一个类,用于定义处理文件系统事件的方法。

以下是一个使用FileSystemEventHandler()监听文件系统事件的示例代码:

import os
import time
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_deleted(self, event):
        if event.is_directory:
            print(f"Directory deleted: {event.src_path}")
        else:
            print(f"File deleted: {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_moved(self, event):
        if event.is_directory:
            print(f"Directory moved from {event.src_path} to {event.dest_path}")
        else:
            print(f"File moved from {event.src_path} to {event.dest_path}")

if __name__ == "__main__":
    path = "./some_directory"

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

在上面的示例代码中,我们定义了一个自定义的MyEventHandler类,继承自FileSystemEventHandler。在MyEventHandler类中,我们重写了on_created()on_deleted()on_modified()on_moved()方法来处理文件系统事件。

当文件或文件夹被创建时,on_created()方法会被调用,并打印出相关信息。同样,当文件或文件夹被删除、修改或移动时,对应的方法会被触发并打印出相应的信息。

然后,在if __name__ == "__main__":代码块中,我们指定要监听的文件或文件夹的路径path,创建一个MyEventHandler对象和一个Observer对象。然后使用observer.schedule()方法将MyEventHandler对象和路径传递给Observer对象进行监听。

最后,我们开始监听文件系统事件并在try块中使用time.sleep(1)保持程序运行,直到收到KeyboardInterrupt信号中止程序。在except KeyboardInterrupt块中,我们停止并等待observer线程完成。

使用这个示例代码,可以监听指定路径下的文件系统事件,并根据不同的事件类型执行相应的操作。