37d32f26016281517d9565cfb135ec280fde7f9f
[portage.git] / pym / portage / util / _async / PopenProcess.py
1 # Copyright 2012 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3
4 from _emerge.SubProcess import SubProcess
5
6 class PopenProcess(SubProcess):
7
8         __slots__ = ("pipe_reader", "proc",)
9
10         def __init__(self, **kwargs):
11                 SubProcess.__init__(self, **kwargs)
12                 self.pid = self.proc.pid
13                 self._registered = True
14
15         def _start(self):
16                 if self.pipe_reader is not None:
17                         try:
18                                 self.pipe_reader.scheduler = self.scheduler
19                         except AttributeError:
20                                 pass
21                         self.pipe_reader.addExitListener(self._pipe_reader_exit)
22                         self.pipe_reader.start()
23
24         def _pipe_reader_exit(self, pipe_reader):
25                 self._reg_id = self.scheduler.child_watch_add(
26                         self.pid, self._child_watch_cb)
27
28         def _child_watch_cb(self, pid, condition, user_data=None):
29                 self._reg_id = None
30                 self._waitpid_cb(pid, condition)
31                 self.wait()