在Python中,watchdog
库确实提供了方便的方式来监控文件夹及其内部文件的新增、删除、修改以及重命名等事件。下面是一个简单的示例,展示如何使用 watchdog
来监听一个文件夹中的这些事件:
python
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
# 定义事件处理器类
class MyHandler(FileSystemEventHandler):
def on_modified(self, event):
print(f'File modified: {event.src_path}')
def on_created(self, event):
print(f'File created: {event.src_path}')
def on_deleted(self, event):
print(f'File deleted: {event.src_path}')
# 对于文件夹的创建、删除操作,请注意:
# 目录级别的事件可通过on_moved方法捕获,因为创建和删除目录也表现为移动事件
def on_moved(self, event):
if event.is_directory:
what = "Directory"
else:
what = "File"
print(f'{what} moved: {event.src_path} to {event.dest_path}')
# 初始化事件处理器实例
event_handler = MyHandler()
# 指定要监控的文件夹路径
watched_dir = '/path/to/watch'
# 初始化观察器
observer = Observer()
# 将事件处理器关联到观察器
observer.schedule(event_handler, watched_dir, recursive=True)
# 启动观察器
observer.start()
print(f'Starting to watch {watched_dir} for file system events...')
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
在这个例子中,MyHandler
类继承了 FileSystemEventHandler
并实现了几个方法来处理不同的文件系统事件。on_modified
方法会在文件被修改时触发,on_created
在文件或目录被创建时触发,而 on_deleted
在文件或目录被删除时触发。对于目录的创建和删除操作,由于Watchdog将它们视为移动操作,因此通过 on_moved
方法进行捕捉,并检查 event.is_directory
属性以区分是文件还是目录。
通过 observer.schedule
方法设置要监控的目录路径和事件处理器,并设置 recursive=True
参数以递归地监控目录内的所有子目录。
最后启动观察器并进入无限循环,直到用户按下 Ctrl+C
中断程序,此时会调用 observer.stop()
和 observer.join()
来正确停止和清理观察器资源。
实测效果
运行1.py,在对应文件夹下创建了一个文件666,我们可以看到它很快就检测到了