Вот код, который работает для меня, с ядром 2.6.18, Python 2.4.3 и pyinotify 0.7.1 - вы можете использовать разные версии некоторых из них, но важно убедиться, что мы я говорю о тех же версиях, я думаю ...:
#!/usr/bin/python2.4
import os.path
from pyinotify import pyinotify
class Watcher(pyinotify.ProcessEvent):
watchdir = '/tmp/watch'
def __init__(self):
pyinotify.ProcessEvent.__init__(self)
wm = pyinotify.WatchManager()
self.notifier = pyinotify.ThreadedNotifier(wm, self)
wdd = wm.add_watch(self.watchdir, pyinotify.EventsCodes.IN_CREATE)
print "Watching", self.watchdir
self.notifier.start()
def process_IN_CREATE(self, event):
print "Seen:", event
pathname = os.path.join(event.path, event.name)
pfile = self._parse(pathname)
print(pfile)
def _parse(self, filename):
f = open(filename)
file = [line.strip() for line in f]
f.close()
return file
if __name__ == '__main__':
Watcher()
когда это выполняется в окне терминала, а в другом окне терминала я делаю
echo "ciao" >/tmp/watch/c3
вывод этой программы:
Watching /tmp/watch
Seen: event_name: IN_CREATE is_dir: False mask: 256 name: c3 path: /tmp/watch wd: 1
['ciao']
как и ожидалось. Поэтому не могли бы вы попробовать этот сценарий (исправляя версию Python в hashbang, если необходимо, конечно) и сообщить нам точные версии ядра Linux, pyinotify и Python, которые вы используете, и что вы наблюдаете в этих точных обстоятельствах? Вполне возможно, с более подробной информацией, мы можем определить, какая ошибка или аномалия вызывает у вас проблемы. Спасибо!