Jan 1, 0001 · 125 words · 1 minute read

Title: watchdogでファイル監視してみた Date: 2012-10-25 00:00 Slug: watchdog Tags: Python

前回の記事でUbuntuにinotify-toolsをインストールしてファイル監視をしようとしたけれど、MacやWindowsでもできるようにPythonモジュールのwatchdogを使ってファイルの監視をやってみました。
((inotify-toolsはOSXにもインストールできるかもしれないけど調べていない))

watchdogのインストール

$ pip install watchdog

インストールにはlibyamlが必要みたいです。

$ sudo aptitude install libyaml-dev # Ubuntuの場合
$ brew install libyaml # Mac OS XでHomebrewを使用の場合

サンプル

ホームディレクトリを監視する

#!/usr/bin/env python
# coding:utf-8
 
import os
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
 
class EventHandler(FileSystemEventHandler):
    def on_created(self, event):
        if event.is_directory:
            print 'directory \'{0}\' created.'.format(event.src_path)
        else:
            print 'file \'{0}\' created.'.format(event.src_path)
 
    def on_modified(self, event):
        if event.is_directory:
            print 'directory \'{0}\' modified.'.format(event.src_path)
        else:
            print 'file \'{0}\' modified.'.format(event.src_path)
        
    def on_deleted(self, event):
        if event.is_directory:
            print 'directory \'{0}\' deleted.'.format(event.src_path)
        else:
            print 'file \'{0}\' deleted.'.format(event.src_path)
 
 
def main():
    watch_dir = os.environ['HOME']
 
    event_handler = EventHandler()
    observer = Observer()
    observer.schedule(event_handler, watch_dir)
    observer.start()
 
    try:
        while True:
            time.sleep(10)
    except (Exception, KeyboardInterrupt):
        observer.stop()
    observer.join()
 
if __name__ == '__main__':
    main()

公式サンプルのイベントハンドラだけを変えて作ってみました。

ファイルを作成するとon_created(ファイル作成)とon_modified(ディレクトリの変更)が動くようで、 on_createdだけが動くわけではないみたいです。