E
eric.frederich
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()
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()