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