как заставить pyinotify запускать программу при любой модификации файла? - PullRequest
5 голосов
/ 13 мая 2011

Мне нужно следить за любым вводом данных или любыми изменениями, внесенными в настоящее содержимое в файл, при любых изменениях мне нужно запускать программу на языке python, которая находится в той же папке.

Я старался изо всех сил, чтобы понять, но я не смог получить хороший результат. Было бы очень полезно, если бы кто-нибудь мог помочь мне в этом.

Спасибо ..:)

Ответы [ 2 ]

10 голосов
/ 13 мая 2011
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()

Замените cmd на команду, которую вы хотите выполнить, а file.watched - на файл, который вы хотите посмотреть.

2 голосов
/ 06 сентября 2012

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

Я работаю над добавлением некоторого совершенства inotify в doit.Для этого я хочу получать одно и только одно уведомление каждый раз, когда файл изменяется.Inotify делает тяжелую работу по наблюдению за файловой системой, а Pyinotify предоставляет интерфейс Python.Но использовать его было не так просто, как я ожидал.Проблема в том, что редакторы манипулируют файлами по-своему…

Это работало нормально, когда я использовал «echo».Но чем когда я пытался с Emacs, я получил 3 уведомления.С VIM это было еще хуже, я не получал уведомлений и сообщений об ошибках!

Получение отличного примера phihag

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

может быть:

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