codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
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)
Private
[
?
]
Run code
Submit