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

基于watchdog.observers的Python文件监控器示例

发布时间:2024-01-18 16:24:09

watchdog.observers是一个Python库,用于监控文件和目录的变化。它使用操作系统底层的API来检测文件和目录的创建、修改、删除、移动等操作,并触发相应的事件。

以下是一个基于watchdog.observers的文件监控器示例:

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

class MyHandler(FileSystemEventHandler):
    def on_modified(self, event):
        if not event.is_directory:
            print(f"{event.event_type}: {event.src_path} has been modified")

    def on_created(self, event):
        if not event.is_directory:
            print(f"{event.event_type}: {event.src_path} has been created")

    def on_deleted(self, event):
        if not event.is_directory:
            print(f"{event.event_type}: {event.src_path} has been deleted")

    def on_moved(self, event):
        if not event.is_directory:
            print(f"{event.event_type}: {event.src_path} has been moved to {event.dest_path}")

if __name__ == "__main__":
    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类,继承自watchdog.events.FileSystemEventHandler。我们重写了它的四个方法:on_modified()、on_created()、on_deleted()和on_moved()。每个方法都会打印出相应的事件类型和文件路径。

然后,我们创建一个Observer对象,并将我们的事件处理程序注册到观察者上。通过调用observer.schedule()方法,我们将事件处理程序与要监视的路径(本例中为当前路径)进行关联。recursive=True表示我们要递归地监视所有子目录。

最后,我们通过调用observer.start()方法来启动观察者。start()方法将创建一个后台线程,用于监视文件和目录的变化。我们使用一个无限循环来阻塞主线程,直到用户按下Ctrl+C停止观察者。在停止观察者之前,我们调用observer.join()方法,以等待所有观察者线程的结束。

下面是一个使用该文件监控器的例子,假设我们将上述代码保存为monitor.py:

import os

# 创建一个新的文件
with open("test.txt", "w") as f:
    f.write("Hello, World!")

# 修改文件内容
with open("test.txt", "a") as f:
    f.write(" This is a test!")

# 删除文件
os.remove("test.txt")

当我们运行上述代码时,文件监控器将打印出以下输出:

Created: ./test.txt has been created
Modified: ./test.txt has been modified
Deleted: ./test.txt has been deleted

这说明文件监控器可以正确地检测到文件的创建、修改和删除操作,并触发相应的事件处理方法。