什么是 Watchdog嘿,先简单唠两句。Watchdog 是个基于 Python 的文件系统事件监控利器,你可以把它看成后台小秘书:文件新增、删除、修改,它都能第一时间告诉你。支持 Python 3.9+,跨 Windows、Linux、macOS、FreeBSD,用系统级 API(inotify、FSEvents、kqueue、ReadDirectoryChangesW)或者轮询(PollingObserver)来捕捉变化。
它能解决哪些痛点有时候我们想干点自动化的事儿,比如:
以前要么写轮询、要么靠平台差异化处理,头发都白了。Watchdog 一下子把跨平台、异步通知给你搞定,让你少造轮子,多写业务。
核心功能及代码示例最简单的 API 用法长这样:
import timefrom watchdog.events importFileSystemEventHandlerfrom watchdog.observers importObserverclass MyHandler(FileSystemEventHandler): def on_any_event(self, event): print(f"触发事件:{event.event_type} → {event.src_path}")observer =Observer()observer.schedule(MyHandler(), path=".", recursive=True)observer.start()try: while True: time.sleep(1)except KeyboardInterrupt: observer.stop()observer.join()
几点说明:
- •
on_any_event:捕获所有事件(创建、修改、删除、移动)
如果你只想关注 .py、.txt 文件,可用 patterns、ignore_directories 过滤。
Shell 实用案例Watchdog 自带一个 watchmedo 小工具,帮你做点命令行脚本级的事儿。
- 1. 只监控 .py、.txt 并打印日志:
watchmedo log \--patterns="**/*.py;**/*.txt" \--ignore-directories \--recursive \--verbose \.
- 2. 改文件就执行命令:
watchmedo shell-command \--patterns="**/*.py;**/*.txt" \--recursive \--command='echo "文件改动:${watch_src_path}"' \.
- 3. 用 Tricks 做更高级的流水线,比如自动压缩、转换。编写
tricks.yaml,随手插插件就行。
优缺点对比
总结好了,总的来说,Watchdog 就是 Python 世界里靠谱的文件监控神器,适合做自动化构建、热重载、同步备份之类的应用。不管项目大小,集成成本低,扩展性强。唯一要注意的是在一些特殊环境(深度目录、网络挂载、编辑器 swap 文件)下,需要选对 Observer 或调整配置。
如果你正在搭自动化流程,或者想给你的开发体验加点料,赶紧试试这个“小秘书”吧!
项目地址:https://github.com/gorakhargosh/watchdog