无论你是在个人使用,还是在团队开发中,watchdog 可以及时通知你,文件或者目录的变化,让你对工作更加得心应手。
Watchdog
watchdog 是一款灵活且易于使用的 Python 库,主要用于监视文件系统的改变。
当指定的文件或文件夹发生任何变动时,watchdog 就会向你的应用程序发送一个 event。这使得你可以在文件发生变动的第一时间得知,无论是文件内容的修改,还是文件名的改变,甚至是新增和删除文件,watchdog 都可以准确的给出反馈。
与其它类似的文件监视库相比,watchdog 的优势在于他更通用,更易于使用,且对于多种操作系统都有很好的兼容性。
无论是 Windows,OS X,还是 Linux,都能非常顺利的运行 watchdog。
项目地址:https://github.com/gorakhargosh/watchdog
安装
pip install watchdog
基本功能
watchdog 的基本使用是非常简单的,你只需要简单的配置一下你的事件处理器,然后就可以让它在后台运行。为了更直观的展示其自动响应文件系统上的变化,这里提供了一段简单的代码供大家参考:
import sys
import time
import logging
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO,
format='%(asctime)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S')
path = sys.argv[1] if len(sys.argv) > 1 else '.'
logging.info(f'start watching directory {path!r}')
event_handler = LoggingEventHandler()
observer = Observer()
observer.schedule(event_handler, path, recursive=True)
observer.start()
try:
while True:
time.sleep(1)
finally:
observer.stop()
observer.join()
在上述脚本运行期间,任何对目录中的文件进行的操作都会被记录下来。例如,以下是记录在笔者在测试时创建新文件的一段日志信息:
2022-11-09 09:26:55 - Created file: ./2022-planner.pdf
2022-11-09 09:26:55 - Modified directory: .
高级功能
watchdog 提供了 watchmedo 用于方便的生成基于 watchdog 的脚本。
这里给出一个例子如何使用 watchmedo 来创建一个脚本,这个脚本将会在每次有 Python 文件保存时执行 unittest。
watchmedo shell-command \
--patterns="*.py" \
--recursive \
--command='echo "${watch_src_path}" && python -m unittest discover path_to_your_tests' \
.
同时,WatchDog 还可以处理诸如文件被 Vim 编辑的情况。
因为 Vim 在编辑文件时,不会直接修改文件,而是新建一个备份文件,再将其替换为我们需要编辑的文件。
这就会导致我们无法通过监控文件修改来获取 Vim 的编辑事件。
而 Watchdog 则提供了使得 Vim 编辑能够被捕获的方式,增加了使用的便捷性。








