跳转到主要内容

文件系统事件监控

项目描述

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 以禁用此功能。

依赖项

  1. Python 2.5 或更高版本。

  2. XCode(仅在 Mac OS X 上)

  3. PyYAML

  4. argh

  5. select_backport(BSD/Mac OS X 上 Python 2.5/2.6 的 kqueue 替代品)

  6. pathtools

许可

Watchdog 在 Apache 许可证 2.0 版的条款下授权。

版权 2011 Yesudeep Mangalapilly

版权 2012 Google, Inc.

项目 源代码 可在 Github 上找到。请通过 问题跟踪器 报告错误和提出增强请求。

为什么选择 Watchdog?

太多人试图做同样的事情,但没有一个能满足我所需要的 Python 功能

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

infi.watchdog-0.6.3.tar.gz (75.6 kB 查看哈希值

上传时间 源代码

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面