diff -r b21c6b602735 circuits/io/file.py
--- a/circuits/io/file.py Wed Jan 23 11:17:10 2013 +0100
+++ b/circuits/io/file.py Wed Jan 23 14:22:07 2013 +0100
@@ -76,6 +76,7 @@
self._poller = None
self._buffer = deque()
self._closeflag = False
+ self._closed = False
@property
def closed(self):
@@ -116,6 +117,8 @@
if "r" in self.mode or "+" in self.mode:
self._poller.addReader(self, self._fd)
+ self._closed = False
+
self.fire(Opened(self.filename, self.mode))
@handler("registered", channel="*")
@@ -159,6 +162,8 @@
except:
pass
+ self._closed = True
+
self.fire(Closed())
def close(self):
diff -r b21c6b602735 circuits/io/process.py
--- a/circuits/io/process.py Wed Jan 23 11:17:10 2013 +0100
+++ b/circuits/io/process.py Wed Jan 23 14:22:07 2013 +0100
@@ -138,12 +138,13 @@
@handler("generate_events")
def _on_generate_events(self, event):
- if self.p is not None:
- status = self.p.poll()
- if status is not self._status:
- self._status = status
- self.fire(Stopped(self))
- event.reduce_time_left(0)
- return True
- else:
- event.reduce_time_left(TIMEOUT)
+ if self.p is not None and self._status is None:
+ self._status = self.p.poll()
+
+ if self._status is not None and self._stdout._closed \
+ and self._stderr._closed:
+ self.fire(Stopped(self))
+ event.reduce_time_left(0)
+ return True
+ else:
+ event.reduce_time_left(TIMEOUT)
diff -r b21c6b602735 tests/io/test_process.py
--- a/tests/io/test_process.py Wed Jan 23 11:17:10 2013 +0100
+++ b/tests/io/test_process.py Wed Jan 23 14:22:07 2013 +0100
@@ -1,12 +1,7 @@
#!/usr/bin/env python
-
-import sys
-
from circuits.io import Process, Start
-from tests.io import hello
-
def test(manager, watcher):
p = Process(["echo", "Hello World!"]).register(manager)