嗨,我很难理解如何使用BSD仅python模块类选择。排队并选择。
我想要一个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"