文件系统事件监测
infi.watchdog的Python项目详细描述
python api和shell实用程序来监视文件系统事件。
API使用示例
使用监视程序监视指定目录的简单程序 作为命令行参数并记录生成的事件:
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实用程序
watchdog附带了一个名为watchmedo的实用程序脚本。 请在shell提示符处键入watchmedo --help以 了解更多有关此工具的信息。
下面是如何递归地记录当前目录的方法 对于仅与*.py和*.txt文件相关的事件 忽略所有目录事件:
watchmedo log \ --patterns="*.py;*.txt" \ --ignore-directories \ --recursive \ .
可以使用shell-command子命令在 对事件的响应:
watchmedo shell-command \ --patterns="*.py;*.txt" \ --recursive \ --command='echo "${watch_src_path}"' \ .
请键入以下命令以查看这些命令的帮助信息:
watchmedo [command] --help
关于watchmedotricks
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版本中。我需要社区的意见。 请在issue tracker处提交增强请求。
安装
使用pip:从pypi安装
pip install watchdog
使用easy_install:从pypi安装
easy_install watchdog
从源安装:
python setup.py install
文档
您可以在线浏览最新版本documentation。
支持的平台
- Linux 2.6(inotify)
- Mac OS X(fsevents,kqueue)
- freebsd/bsd(kqueue)
- Windows(带I/O完成端口的ReadDirectoryChangeSW; readdirectorychangesw工作线程)
- 与操作系统无关(为目录快照轮询磁盘并进行比较 定期;缓慢且不推荐)
请注意,在kqueue中使用watchdog时,需要 程序允许打开的文件描述符数 在您的系统上运行将增加到 要监视的文件数。最简单的方法 这样做就是编辑~/.profile文件并添加 类似于:
ulimit -n 1024
这是kqueue的固有问题,因为它使用 用于监视文件的文件描述符。再加上巨大的 监管机构需要做的记账数量 监视文件描述符只会使这成为一种痛苦的方式 监视文件和目录。实际上,kqueue是 不是一种非常可伸缩的方法来监视深度嵌套的 包含大量文件和目录的目录 文件夹。
关于在vim等编辑器中使用watchdog
vim不会修改文件,除非有人指示这样做。 它创建备份文件,然后将它们交换到 正在磁盘上编辑的文件。这意味着 如果使用vim编辑文件,则on modified事件 因为这些文件不会被看门狗触发。 您可能需要将vim配置为适当地禁用 这个功能。
依赖关系
- Python2.5或更高版本。
- XCode(仅在Mac OS X上)
- PyYAML
- argh
- select_backport(选择.kqueue替换bsd/mac os x上的python2.5/2.6)
- pathtools
许可
watchdog是根据Apache License, version 2.0的条款授权的。
版权所有2011 Yesudeep Mangalapilly。
版权所有2012 Google,Inc.
github上提供项目source code。请报告错误并存档 位于issue tracker的增强请求。
为什么是看门狗?
太多人试图做同样的事情,但没有人做我需要的python 待办事项: