在创建文件时读取文件来发现错误?
收藏

每次在某个目录中创建新文件时,我都要解析一个文件。为此,我试图使用pyinotify设置一个目录来监视IN_CREATE内核事件,并启动parse()方法。
以下是模块:

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无法正确读取文件。但是…为什么?


最佳答案:

你想等到文件关闭吗?

    公众号
    关注公众号订阅更多技术干货!