GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

gorakhargosh

watchdog – ファイルシステムのイベントを監視するためのPythonライブラリとシェルユーティリティ

投稿日:

ファイルシステムのイベントを監視するためのPythonライブラリとシェルユーティリティ。 http://packages.python.org/watchdog/

ウォッチドッグ

ファイルシステムのイベントを監視するためのPython APIとシェルユーティリティ。

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()

シェルユーティリティ

ウォッチドッグには、 watchmedoというユーティリティスクリプトが付属しています。 このツールの詳細については、シェルプロンプトでwatchmedo --helpと入力してください。

すべてのディレクトリイベントを無視して、 *.txt *.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

watchmedoトリックについて

watchmedotricks.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をインストールしてください。

ドキュメンテーション

最新のリリース文書をオンラインで閲覧することができます。

寄稿

GitHub上のリポジトリをフォークし、プルリクエストを送信するか、 issue trackerでissueチケットを発行します。 一般的なヘルプや質問は、公式のメーリングリストを使用するか、python-watchdogタグでstackoverflowで問い合わせてください。

仮想環境を作成して有効にしてから、

pip install pytest
pip install -e .
py.test tests

サポートされているプラ​​ットフォーム

  • Linux 2.6(inotify)
  • Mac OS X(FSEvents、kqueue)
  • FreeBSD / BSD(kqueue)
  • Windows(I / O完了ポートを持つReadDirectoryChangesW、ReadDirectoryChangesWワーカースレッド)
  • OSに依存しない(ディレクトリスナップショットのディスクをポーリングして定期的に比較する、遅く、推奨しない)

ウォッチドッグとkqueueを併用する場合は、システム上で実行されているプログラムによってオープンできるファイル記述子の数が、監視するファイル数を超えて増加する必要があることに注意してください。 これを行う最も簡単な方法は、 ~/.profileファイルを編集して、次のような行を追加することです。

ulimit -n 1024

これはファイル記述子を使用してファイルを監視するため、kqueue固有の問題です。 これに加えて、ファイル記述子を監視するためにウォッチドッグが行う必要がある膨大な量の簿記は、これをファイルとディレクトリを監視する痛い方法にしています。 本質的に、kqueueは、多数のファイルを持つファイルやディレクトリの深くネストされたディレクトリを監視する非常にスケーラブルな方法ではありません。

Vimのようなエディタでのウォッチドッグの使用について

Vimは指示されない限りファイルを変更しません。 バックアップファイルを作成した後、それらをスワップして、ディスク上で編集しているファイルを置き換えます。 つまり、Vimを使用してファイルを編集すると、そのファイルの変更されたイベントはウォッチドッグによってトリガーされません。 この機能を無効にするには、Vimを適切に設定する必要があります。

依存関係

  1. Python 2.6以上。
  2. パスツール
  3. select_backport (BSD / Mac OS Xでの2.6のselect.queue置換)
  4. XCode (Mac OS Xのみ)
  5. PyYAMLwatchmedoスクリプトの場合のみ)
  6. watchmedowatchmedoスクリプトの場合のみ)

ライセンス

ウォッチドッグは、 Apache Licenseバージョン2.0の条件に基づいて使用許諾されます

Copyright 2011 Yesudeep Mangalapilly

Copyright 2012 Google、Inc.

プロジェクトのソースコードはGithubで入手できます。 問題追跡ツールでバグを報告し、改善要求を提出してください。

なぜウォッチドッグ?

あまりにも多くの人が同じことをしようとしましたが、Pythonに必要なことは何もしませんでした:







-gorakhargosh

執筆者: