I am trying to write something that will watch directories without poling them. This is what FAM is fore. Gamin is a re-implementation of FAM and it has python bindings.
The problem is that when I call handle_one_event() it blocks until there is an event to handle. Pressing Ctrl-C does nothing here. This seems to be the behavior of FAM so it was re-implemented in Gamin. I looked at another set of bindings for FAM in Java. It came with an example that watched a directory for changes. They basically put the code that blocks in another thread and accepted input on a second thread waiting for the user to press q and it would kill the blocking thread. I don't know how to do something like this in Python, I have never used threads and I'm not sure if thats the way to go. Someone else that complained about the blocking behavior of those calls said that he found a solution since he was using OCaml. Apparently OCaml has a way to say that you're entering a block of code that blocks and you can still exit using Ctrl-C. I don't think anything like this exists in Python does it? So, my question here is.... How from Python can I call code that blocks without losing the ability to use Ctrl-C? Here is the code that is impenetrable to Ctrl-C. You need to kill it with another terminal.... #!/usr/bin/env python import gamin import sys directory = sys.argv[1] def callback(path, event): print "Got callback: %s, %s" % (path, event) mon = gamin.WatchMonitor() mon.watch_directory(directory, callback) mon.event_pending() while True: mon.handle_one_event() -- http://mail.python.org/mailman/listinfo/python-list