文件系统事件监测

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

安装注意事项

watchmedo脚本取决于与LibYAML链接的PyYAML, 这给pyyaml解析器带来了性能提升。但是,安装 LibYAML是可选的,但建议使用。在MacOSX上,您可以使用homebrew 要安装libyaml:

brew install libyaml

在Linux上,使用您最喜欢的包管理器安装libyaml。你就是这样 在ubuntu上做:

sudo aptitude install libyaml-dev

在windows上,请使用它们提供的二进制文件安装PyYAML

文档

您可以在线浏览最新版本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配置为适当地禁用 这个功能。

依赖关系

  1. Python2.5或更高版本。
  2. XCode(仅在Mac OS X上)
  3. PyYAML
  4. argh
  5. select_backport(选择.kqueue替换bsd/mac os x上的python2.5/2.6)
  6. pathtools

许可

watchdog是根据Apache License, version 2.0的条款授权的。

版权所有2011 Yesudeep Mangalapilly

版权所有2012 Google,Inc.

github上提供项目source code。请报告错误并存档 位于issue tracker的增强请求。

为什么是看门狗?

太多人试图做同样的事情,但没有人做我需要的python 待办事项:

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
box api如何使用box Java SDK从图像文件中获取特定大小的缩略图?   java无法从JNA使用python cffi调用DLL中定义的函数   java在linux中通过Jar文件发送电子邮件   使用lucene+hibernate的java查询时间连接   java在带有循环的arrayList中设置值   java为什么ImageReader返回错误的BuffereImage?   c#TCP数据有时接收顺序错误且不完整   java如果发生IOException,该InputStream是否会正确关闭?   tcp在Java中,如果不使用IP,如何获取MAC地址?   java从批处理方法调用中收集结果   java Android Studio RecyclerView在滚动图像时严重滞后   java如何使用OOP进行retrofti调用?   记录FileAppender在Java中如何工作   与S3连接期间收到java异常   java找不到JNDI资源Tomcat 7