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

Python实现的观察者模式监听文件变化的演示案例

发布时间:2024-01-18 16:27:39

观察者模式是一种软件设计模式,它定义了一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知和更新。

在Python中,可以使用watchdog库来实现文件系统的观察者模式。watchdog是一个Python库,在Linux、Windows和Mac OS X上监听文件系统的变化。

首先,我们需要安装watchdog库。可以通过以下命令来安装:

pip install watchdog

下面是一个使用watchdog库实现观察者模式的简单示例:

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

# 自定义事件处理器,继承FileSystemEventHandler类并重写相应的方法
class MyHandler(FileSystemEventHandler):
    def on_modified(self, event):
        # 当文件被修改时,打印文件名及操作类型
        print(f"File {event.src_path} was {event.event_type}")

# 创建观察者对象及事件处理器对象
observer = Observer()
event_handler = MyHandler()

# 指定要观察的文件目录和事件类型
observer.schedule(event_handler, path="./", recursive=True)

# 启动观察者
observer.start()

try:
    # 持续监听文件变化
    while True:
        time.sleep(1)
except KeyboardInterrupt:
    # 停止观察者
    observer.stop()

# 等待观察者线程结束
observer.join()

上述代码中,MyHandler是自定义的事件处理器,继承自watchdog库中的FileSystemEventHandler类。我们重写了on_modified方法,在文件被修改时会触发该方法,并打印文件名和操作类型。

接下来,创建观察者对象observer以及事件处理器对象event_handlerobserver.schedule(event_handler, path="./", recursive=True)用于指定要观察的文件目录和事件类型。

最后,通过observer.start()启动观察者,observer.stop()停止观察者。observer.join()等待观察者线程结束。

下面是一个完整的使用例子:

假设我们有一个名为test.txt的文本文件,我们可以使用上述代码来监听文件的变化。当我们修改test.txt文件时,会打印出文件名和操作类型。

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

class MyHandler(FileSystemEventHandler):
    def on_modified(self, event):
        print(f"File {event.src_path} was {event.event_type}")

observer = Observer()
event_handler = MyHandler()
observer.schedule(event_handler, path="./", recursive=True)
observer.start()

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

运行上述代码后,进行如下操作:

1. 创建一个名为test.txt的文本文件。

2. 打开test.txt文件并添加内容。

3. 保存test.txt文件。

你将会在终端中看到如下输出:

File ./test.txt was modified

这就是使用watchdog库实现观察者模式来监听文件变化的一个简单例子。你可以根据自己的需求,进行进一步的扩展和定制。