| # Copyright 2012 Gentoo Foundation |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| from _emerge.SubProcess import SubProcess |
| |
| class PopenProcess(SubProcess): |
| |
| __slots__ = ("pipe_reader", "proc",) |
| |
| def _start(self): |
| |
| self.pid = self.proc.pid |
| self._registered = True |
| |
| if self.pipe_reader is None: |
| self._reg_id = self.scheduler.child_watch_add( |
| self.pid, self._child_watch_cb) |
| else: |
| try: |
| self.pipe_reader.scheduler = self.scheduler |
| except AttributeError: |
| pass |
| self.pipe_reader.addExitListener(self._pipe_reader_exit) |
| self.pipe_reader.start() |
| |
| def _pipe_reader_exit(self, pipe_reader): |
| self._reg_id = self.scheduler.child_watch_add( |
| self.pid, self._child_watch_cb) |
| |
| def _child_watch_cb(self, pid, condition, user_data=None): |
| self._reg_id = None |
| self._waitpid_cb(pid, condition) |
| self.wait() |