2 import popen2, fcntl, os
4 class Process(Events.EventSource):
6 def __init__(self, command, context):
7 self._proc = popen2.Popen4(command)
8 fcntl.fcntl(self._proc.fromchild, fcntl.F_SETFL, os.O_NDELAY)
9 Events.EventSource.__init__(self, self._proc.fromchild, context)
11 Logger.log(self.context(),"launched %s" % command)
14 data = (self._buffer + self._proc.fromchild.read()).split('\n')
15 self._buffer = data.pop(-1)
17 Logger.log(self.context(), line)
19 if rv != -1 : self._term(rv)
23 os.kill(self._proc.pid,signal.SIGTERM)
24 self._term(self._proc.wait())
27 if self._buffer : Logger.log(self.context(),self._buffer)
29 Logger.log(self.context(), 'Terminated with exit code %s' % rv)
30 self.owner().unregisterSource(self)