文件系统事件监控
项目描述
Python API 和 shell 工具,用于监控文件系统事件。
示例 API 使用
一个简单的程序,使用 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 '.' event_handler = LoggingEventHandler() observer = Observer() observer.schedule(event_handler, path, recursive=True) observer.start() try: while True: time.sleep(1) except KeyboardInterrupt: observer.stop() observer.join()
Shell 工具
看门狗附带一个名为 watchmedo 的实用脚本。请在shell提示符下输入 watchmedo --help 以了解更多关于此工具的信息。
以下是递归记录当前目录中与 *.py 和 *.txt 文件相关的事件,同时忽略所有目录事件的步骤
watchmedo log \ --patterns="*.py;*.txt" \ --ignore-directories \ --recursive \ .
您可以使用 shell-command 子命令来在响应事件时执行shell命令
watchmedo shell-command \ --patterns="*.py;*.txt" \ --recursive \ --command='echo "${watch_src_path}"' \ .
请输入这些命令的帮助信息
watchmedo [command] --help
关于 watchmedo 技巧
watchmedo 可以读取 tricks.yaml 文件,并在响应文件系统事件时执行其中的技巧。技巧实际上是子类化 watchdog.tricks.Trick 的事件处理器,由插件作者编写。技巧类增加了常规事件处理器不需要的一些附加功能。
一个示例 tricks.yaml 文件
tricks: - watchdog.tricks.LoggerTrick: patterns: ["*.py", "*.js"] - watchmedo_webtricks.GoogleClosureTrick: patterns: ['*.js'] hash_names: true mappings_format: json # json|yaml|python mappings_module: app/javascript_mappings suffix: .min.js compilation_level: advanced # simple|advanced source_directory: app/static/js/ destination_directory: app/public/js/ files: index-page: - app/static/js/vendor/jquery*.js - app/static/js/base.js - app/static/js/index-page.js about-page: - app/static/js/vendor/jquery*.js - app/static/js/base.js - app/static/js/about-page/**/*.js
包含 tricks.yaml 文件的目录将被监控。每个技巧类使用 tricks.yaml 文件中相应的键作为参数进行初始化,并且当事件到来时,将事件传递给此类的一个实例。
技巧将在 0.5.0 版本中包含。我需要社区的反馈。请在 问题跟踪器 中提交增强请求。
安装
使用 pip 从 PyPI 安装
pip install watchdog
使用 easy_install 从 PyPI 安装
easy_install watchdog
从源代码安装
python setup.py install
安装注意事项
watchmedo 脚本依赖于 PyYAML,它链接到 LibYAML,这为 PyYAML 解析器带来了性能提升。然而,安装 LibYAML 是可选的但推荐。在 Mac OS X 上,您可以使用 homebrew 来安装 LibYAML
brew install libyaml
在 Linux 上,请使用您最喜欢的包管理器安装 LibYAML。以下是在 Ubuntu 上这样做的方法
sudo aptitude install libyaml-dev
在 Windows 上,请使用他们提供的二进制文件使用 PyYAML 进行安装。
文档
您可以在网上浏览最新版本的 文档。
支持的平台
Linux 2.6 (inotify)
Mac OS X (FSEvents, kqueue)
FreeBSD/BSD (kqueue)
Windows (ReadDirectoryChangesW 与 I/O 完成端口;ReadDirectoryChangesW 工作线程)
与操作系统无关(轮询磁盘以获取目录快照,并定期比较它们;速度慢,不推荐)
请注意,当使用 watchdog 与 kqueue 一起使用时,需要将您系统上运行程序可以打开的文件描述符的数量增加到要监控的文件数量以上。最简单的方法是编辑您的 ~/.profile 文件并添加类似以下的一行
ulimit -n 1024
这是 kqueue 的一种固有问题,因为它使用文件描述符来监控文件。再加上 watchdog 为了监控文件描述符而需要做的巨大数量的记账工作,这使监控文件和目录变得痛苦。本质上,kqueue 不是监控深度嵌套的文件和目录的大量文件的很好方法。
关于与 Vim 等编辑器一起使用 watchdog
除非明确指示,Vim 不会修改文件。它会创建备份文件,然后将其交换以替换磁盘上正在编辑的文件。这意味着如果您使用 Vim 编辑文件,这些文件的修改事件不会由 watchdog 触发。您可能需要配置 Vim 以禁用此功能。
依赖项
Python 2.5 或更高版本。
XCode(仅在 Mac OS X 上)
select_backport(BSD/Mac OS X 上 Python 2.5/2.6 的 kqueue 替代品)
许可
Watchdog 在 Apache 许可证 2.0 版的条款下授权。
版权 2011 Yesudeep Mangalapilly。
版权 2012 Google, Inc.
为什么选择 Watchdog?
太多人试图做同样的事情,但没有一个能满足我所需要的 Python 功能
项目详情
infi.watchdog-0.6.3.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | dbc6c53a6a2719285372434e023a18f1209bed87bfd4d18e71417eee5352d4a4 |
|
MD5 | cfd0c2b4fdb855bda508db796acc2de7 |
|
BLAKE2b-256 | b6a86c19aee9a58477ff363f7320d5f44e8e1e03df9b94dbacf4b5f7a4396d59 |