テストの実行と組み合わせると便利なんじゃないかと思って書きました.
ファイルの変更はタイムスタンプの更新でチェックしています.
Python製で,Ubuntu12.04で動作を確認しています.Pythonの動作する環境なら他の環境でも動作すると思います.
ディレクトリを再帰的に確認はしません.再帰的に確認できたほうが便利だと思ったら書き加えます.
続きはソースコードです.
dirwatch.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import datetime
import time
import os
from stat import *
import commands
def watch(dir, command):
timestamp = time.mktime(datetime.datetime.now().utctimetuple())
while True:
for file in os.listdir(dir):
# 隠しファイルは無視
if 0 is file.find('.'):
continue
file_timestamp = os.stat(file)[ST_MTIME]
if timestamp < file_timestamp:
timestamp = file_timestamp
print(commands.getoutput(command))
break
# 100ミリ秒待機
time.sleep(0.1)
def help():
print(u'第一引数が監視対象のディレクトリです.')
print(u'第二匹数が監視下のファイルに変更があった場合に実行するコマンドです.')
print(u'例: % dirwatch . \'echo "hello"\'')
print(u'例ではカレントディレクトリ内のファイルに変更があった場合にhelloと表示します.')
if __name__ == '__main__':
# 引数足りない場合にヘルプを表示する.
if 3 > len(sys.argv):
help()
else:
watch(sys.argv[1], sys.argv[2])
Gist: https://gist.github.com/4059125
このファイルを適当なところに置き,実行権限をつけ,パスの通ったところからシンボリックリンクを張って使います.
追記
https://github.com/guard/guard
こういうものがあることを@gabu さんに教えて頂きました.
0 件のコメント:
コメントを投稿