A straw-man solution in Python that monitors a directory for changes
(Linux only):

#!/usr/bin/env python2

import sys
import os

if sys.platform not in ("linux2",):
    sys.exit("%s only runs on Linux" % os.path.basename(sys.argv[0]))

# TODO: we should check that kernel version >= 2.4.19
# e.g. with 'uname -r'

import fcntl
import signal

TESTDIRECTORY = "."

def notify(directory, handler):
    fd = os.open(directory, os.O_RDONLY)
    fcntl.fcntl(fd, fcntl.F_NOTIFY,
fcntl.DN_ACCESS|fcntl.DN_MODIFY|fcntl.DN_CREATE)
    signal.signal(signal.SIGIO, handler)

def handler(signum, frame):
    print "Something happened; signal =", signum

if __name__ == "__main__":
    notify(TESTDIRECTORY, handler)
    try:
        signal.pause() # sleep until signal received
    except KeyboardInterrupt:
        pass

With Python 2.4 one could bind e.g. to signal.SIGRTMIN instead of the
default SIGIO and get additional info, as suggested by the C example in
Documentation/dnotify.txt (look in the Linux src tree). But then I am
note sure you can access a siginfo structure directly from Python. With
the example above, one would probably write the handler so that it
rescans the directory when called to detect what actually changed.

Davide

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to