Python文件监听应使用watchdog库而非轮询,它基于系统原生事件接口高效响应;需继承FileSystemEventHandler定制事件处理,注意过滤文件类型、规避临时文件、处理大文件写入延迟,并关注权限、路径深度及异常重连等生产环境问题。

Python文件监听的核心是捕获文件系统事件,而不是轮询检查——用 watchdog 库最稳定、跨平台、资源占用低。
安装并初始化监听器
先通过 pip 安装 watchdog:
pip install watchdog
它基于操作系统原生事件接口(如 Linux 的 inotify、macOS 的 FSEvents、Windows 的 ReadDirectoryChangesW),响应快且不耗 CPU。别用 time.sleep() + os.path.getmtime() 轮询,效率低还容易漏事件。
立即学习“Python免费学习笔记(深入)”;
监听指定路径的增删改操作
写一个基础监听脚本,对目标目录下的所有文件和子目录变化做出反应:
创建 FileChangeHandler 类继承 FileSystemEventHandler,重写 on_modified、on_created、on_deleted 等方法;
用 Observer 启动监听线程,调用 schedule(handler, path, recursive=True) 绑定路径;
调用 start() 运行,用 join() 保持主线程活跃(或加信号处理优雅退出)。
区分事件类型与过滤目标文件
每个事件对象(如 event)都带 event.is_directory 和 event.src_path 属性;
可在回调中加判断,例如只处理 .py 或 .txt 文件:
if event.src_path.endswith(('.py', '.txt')) and not event.is_directory:
注意:on_modified 在文件保存瞬间触发,但内容可能未完全写入——大文件场景建议加短暂延迟或检查文件大小是否稳定;
临时文件(如编辑器生成的 .swp、~ 结尾文件)建议在 handler 中直接忽略。
生产环境注意事项
监听路径需有读取权限,Windows 下若路径含中文或符号,确保 Python 脚本使用 UTF-8 编码;
避免监听过深或过广的目录(如整个 C:\ 或 /usr),防止 fd 耗尽或事件风暴;
多进程场景下,watchdog 不自动同步事件,需自行加锁或用消息队列分发;
长时间运行时,建议捕获 OSError(如目录被删除)并重连,或用 observer.unschedule() + schedule() 恢复监听。










