2011-10-31 137 views
0

修改刪除或擴展您好,我很難理解如何使用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來檢測文件修改或任何其他事件(如文件刪除,文件重命名等)

回答

0

看看看門狗模塊的代碼我想出了這個。我不知道這些旗幟是否有必要。

#/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" 
相關問題