我想在每次在某個目錄中創建一個新文件時解析一個文件。爲此,我試圖使用pyinotify來設置一個目錄來觀察IN_CREATE
內核事件,並激發parse()
方法。pyinotify在創建時讀取文件的錯誤?
這裏是模塊:
from pyinotify import WatchManager,
ThreadedNotifier, ProcessEvent, IN_CREATE
class Watcher(ProcessEvent):
watchdir = '/tmp/watch'
def __init__(self):
ProcessEvent.__init__(self)
wm = WatchManager()
self.notifier = ThreadedNotifier(wm, self)
wdd = wm.add_watch(self.watchdir, IN_CREATE)
self.notifier.start()
def process_IN_CREATE(self, event):
pfile = self._parse(event.pathname)
print(pfile)
def _parse(self, filename):
f = open(filename)
file = [line.strip() for line in f.readlines()]
f.close()
return file
if __name__ == '__main__':
Watcher()
的問題是,由_parse返回的列表是空當一個新的文件創建事件,引發了像這樣(在同時watcher.py
另一個窗口中創建的文件正在運行):
$ python watcher.py
[]
...但奇怪的是,它從一個解釋器會話時直接調用工作。
>>> import watcher
>>> w = watcher.Watcher()
>>> w._parse('/tmp/watch/sample')
['This is a sample file', 'Another line', 'And another...']
這是怎麼發生的?我調試這件事最遠的地方是知道有些東西正在使pyinotify不能正確讀取文件。但爲什麼?
比賽條件? – SilentGhost 2009-04-26 14:11:08
除了`IN_CREATE`之外,你應該在`IN_MODIFY`上掛鉤。即`pyinotify.IN_CREATE | pyinotify中。IN_MODIFY` – 2013-04-23 04:09:53