检查文件是否被修改使用python select.kqueue()

问题描述:

修改删除或扩展您好,我很难理解如何使用BSD only python模块类select.kqueue和select.kevent来设置文件写入事件的监视。检查文件是否被修改使用python select.kqueue()

我想要一个python程序来响应每当一个文本文件被另一个进程写入。 我的测试代码去如下:

import os 
    myfd = os.open("/Users/hari/c2cbio/t.txt",os.O_RDONLY) 
    my_event=select.kevent(myfd,filter=select.KQ_FILTER_VNODE,fflags=select.KQ_NOTE_WRITE|select.KQ_NOTE_EXTEND) 

    # I now create a kqueue object and a control object 

    kq = select.kqueue() 
    # I dont know how to set the max_events if it is non zero the REPL does not return 
    kq.control([my_event],0,None) 

我不知道如何进行检查,这些事件确实发生了。有人可以指点我一个例子,使用kqueue来检测文件修改或任何其他事件(如文件删除,文件重命名等)

看看看门狗模块的代码我想出了这个。我不知道这些旗帜是否有必要。

#/usr/bin/env python 
import select 
import os 

kq = select.kqueue() 
# Use the OSX specific os.EVTONLY 
# http://code.google.com/p/python-watchdog/source/browse/src/watchdog/observers/kqueue.py 
fd = os.open("/Users/hari/c2cbio/t.txt", 0x8000) 

ev = [select.kevent(fd, filter=select.KQ_FILTER_VNODE,flags=select.KQ_EV_ADD | select.KQ_EV_ENABLE | select.KQ_EV_CLEAR,fflags=select.KQ_NOTE_WRITE | select.KQ_NOTE_EXTEND)] 
#This call will block till the write or extend events occur 
evts = kq.control(ev,1,None) 
print "event occurred"