Проверьте, был ли файл изменен, удален или расширен с помощью python select.kqueue () - PullRequest
0 голосов
/ 31 октября 2011

Привет, мне трудно понять, как использовать только классы Python для модулей BSD select.kqueue и select.kevent, чтобы настроить наблюдение за событиями записи файлов.

Я хочу, чтобы программа на 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 для обнаружения изменения файла или любых других событий (таких как удаление файла, переименование файла и т. Д.)

1 Ответ

0 голосов
/ 01 ноября 2011

Глядя на код для сторожевого модуля, я придумал это. Я не знаю, нужны ли флаги.

#/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"
...