python -watchdog文件监控
·
# watchdog==6.0.0
import os
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler, FileCreatedEvent, FileModifiedEvent, FileDeletedEvent, FileMovedEvent
from watchdog.observers.polling import PollingObserver
class FileChangeHandler(FileSystemEventHandler):
"""文件变化事件处理器,继承自watchdog的事件处理器基类"""
def on_created(self, event: FileCreatedEvent):
"""文件创建事件处理"""
if not event.is_directory:
print(f"[新建] 文件: {event.src_path}")
else:
print(f"[新建] 目录: {event.src_path}")
def on_modified(self, event: FileModifiedEvent):
"""文件修改事件处理"""
if not event.is_directory:
print(f"[修改] 文件: {event.src_path}")
else:
print(f"[修改] 目录: {event.src_path}")
def on_deleted(self, event: FileDeletedEvent):
"""文件删除事件处理"""
if not event.is_directory:
print(f"[删除] 文件: {event.src_path}")
else:
print(f"[删除] 目录: {event.src_path}")
def on_moved(self, event: FileMovedEvent):
"""文件移动/重命名事件处理"""
if not event.is_directory:
print(f"[移动] 文件: {event.src_path} → {event.dest_path}")
else:
print(f"[移动] 目录: {event.src_path} → {event.dest_path}")
def start_watching(directory: str, recursive: bool = True):
"""
启动文件系统监控
参数:
directory: 要监控的目录路径
recursive: 是否递归监控子目录,默认为True
"""
# 确保目录存在
if not os.path.exists(directory):
raise ValueError(f"监控目录不存在: {directory}")
# 创建事件处理器和观察者
event_handler = FileChangeHandler()
observer = PollingObserver(timeout=2) #Observer() 两种方式
# 调度监控任务
observer.schedule(
event_handler,
path=directory,
recursive=recursive
)
# 启动监控
observer.start()
print(f"开始监控目录: {directory}")
print("按 Ctrl+C 停止监控...")
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
# 优雅地停止监控
observer.stop()
print("\n监控已停止")
# 等待监控线程结束
observer.join()
if __name__ == "__main__":
# 要监控的目录路径,修改为你需要监控的目录
MONITOR_DIR = r"D:\jiexun\detection\yolo"
# 启动监控
try:
start_watching(MONITOR_DIR)
except Exception as e:
print(f"监控失败: {e}")

选择 Observer 还是 PollingObserver 主要取决于文件系统类型和实时性需求。默认实现适合大多数本地场景,而轮询方式则是网络环境和特殊文件系统的必备方案。
更多推荐


所有评论(0)