2011-10-31 7 views
0

안녕하세요, BSD 전용 파이썬 모듈 클래스 select.kqueue 및 select.kevent를 사용하여 파일 쓰기 이벤트를 감시하는 방법을 이해하는 데 어려움을 겪고 있습니다. .파일이 수정되었거나 python select.kqueue()를 사용하여 확장되어 있는지 확인하십시오.

나는 텍스트 파일이 다른 프로세스에 의해 쓰여질 때마다 반응하는 파이썬 프로그램을 원한다. 다음과 같이 내 테스트 코드가 간다 :

나는이 사건이 실제로 일어난 것을 확인하기 위해 진행 방법을 잘 모릅니다
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"