Watchdog (python文件监视库)

无论你是在个人使用,还是在团队开发中,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  编辑能够被捕获的方式,增加了使用的便捷性。


© 版权声明
THE END
喜欢就支持一下吧
分享