使用Observer模式实现的Python文件变化监视器
发布时间:2024-01-18 16:24:44
Observer模式是一种软件设计模式,它用于将一个对象的状态变化通知给一组依赖于该对象的观察者对象。在Python中,可以使用内置的observer模块来实现Observer模式。
首先,需要导入observer模块:
import os import time from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler
接下来,定义一个MyHandler类,继承自FileSystemEventHandler,用于处理文件系统事件:
class MyHandler(FileSystemEventHandler):
def on_modified(self, event):
if not event.is_directory and event.event_type == 'modified':
print(f"File modified: {event.src_path}")
在MyHandler类中,重写了on_modified方法,当文件被修改时会打印出文件路径。
然后,创建一个Observer对象,并将MyHandler的实例添加到观察者列表中:
event_handler = MyHandler() observer = Observer() observer.schedule(event_handler, path='.', recursive=True)
在这里,将event_handler作为事件处理程序,使用.作为观察的路径,recursive=True表示递归地观察子目录。
最后,调用start方法开始监视:
observer.start()
如果想要一直运行监视器,可以添加一个无限循环:
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
在这里,使用time.sleep(1)来使程序每秒钟检查一次文件系统。当用户按下Ctrl+C时,通过observer.stop()停止观察器,并通过observer.join()等待观察器线程结束。
下面是一个使用Observer模式实现的文件变化监视器的完整例子:
import os
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 and event.event_type == 'modified':
print(f"File modified: {event.src_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()
以上代码会监视当前目录及其子目录中所有文件的变化,并在文件被修改时打印出文件路径。可以根据实际需求修改文件路径和监视的事件。
