2011-05-13 9 views
5

私は、同じ内容のファイルに加えられたすべての入力や変更を監視する必要があります。変更があった場合、同じフォルダにあるPythonプログラムを実行する必要があります。pyinotifyを使ってファイルを変更したときにプログラムを実行する方法は?

私は理解しようとしましたが、私は良い結果を得ることができません。 誰もが私を助けることができるなら、大きな助けになるでしょう。

は...ありがとう:)

答えて

9
import pyinotify,subprocess 
def onChange(ev): 
    cmd = ['/bin/echo', 'File', ev.pathname, 'changed'] 
    subprocess.Popen(cmd).communicate() 
wm = pyinotify.WatchManager() 
wm.add_watch('file.watched', pyinotify.IN_MODIFY, onChange) 
notifier = pyinotify.Notifier(wm) 
notifier.loop() 

をあなたは明らかに、あなたが見たいファイルを実行し、file.watchedしたいコマンドでcmdを交換してください。

+0

私は、だから私はこのような何かを配置する必要があるのpythonプログラム を実行する必要があります。 py = ['/ bin/echo'、 'File'、ev.pathname、 'changed'] '?? –

+0

@Bhuvan rajいいえ、 'cmd = ['/ usr/bin/env'、 'python'、 './my_prog.py'、ev.pathname]' – phihag

+0

に感謝します:) :) :) :)その働き。あなたがev.pathnameがそのパラメタリストで何をしているのかを説明できれば幸いです。 –

2

http://schettino72.wordpress.com/tag/inotify/

から私はドイトするためにいくつかのinotify良さを追加することに取り組んでいます。そのためには、ファイルが変更されるたびに1つだけ通知を受け取ることを希望します。 Inotifyはファイルシステムを見守ることに苦労し、PyinotifyはPythonインターフェイスを提供します。しかし、私が期待していたようにそれを使うのは簡単ではありませんでした。問題は、編集者が独自の方法でファイルを操作することです。

「エコー」を使用するとうまくいきました。しかし、私がEmacsで試したときよりも3つの通知があります。 VIMを使用するとさらに悪いことに、通知もエラーメッセージも出ませんでした。

はphihag

wm.add_watch('file.watched', pyinotify.IN_MODIFY, onChange) 

の優秀例を取得することができます `Pythonのmy_prog:

wm.add_watch('file.watched', pyinotify.IN_CLOSE_WRITE, onChange) 
関連する問題