def forkHelper(cmd, fd, inputHandler, closeToChild): child = xPopen3(cmd, True, -1, [fd]) if closeToChild: child.tochild.close() thread = threading.Thread(target=slurp, args=(child.childerr, )) thread.start() try: try: while 1: line = child.fromchild.readline() if line == "": break else: line = line.rstrip() log.debug('%s', line) inputHandler(line, child.tochild) except IOError, exn: raise XendError('Error reading from child process for %s: %s' % (cmd, exn)) finally: child.fromchild.close() if not closeToChild: child.tochild.close() thread.join() child.childerr.close() status = child.wait() if status >> 8 == 127: raise XendError("%s failed: popen failed" % string.join(cmd)) elif status != 0: raise XendError("%s failed" % string.join(cmd))
def forkHelper(cmd, fd, inputHandler, closeToChild): child = xPopen3(cmd, True, -1, [fd]) if closeToChild: child.tochild.close() thread = threading.Thread(target = slurp, args = (child.childerr,)) thread.start() try: try: while 1: line = child.fromchild.readline() if line == "": break else: line = line.rstrip() log.debug('%s', line) inputHandler(line, child.tochild) except IOError, exn: raise XendError('Error reading from child process for %s: %s' % (cmd, exn)) finally: child.fromchild.close() if not closeToChild: child.tochild.close() thread.join() child.childerr.close() status = child.wait() if status >> 8 == 127: raise XendError("%s failed: popen failed" % string.join(cmd)) elif status != 0: raise XendError("%s failed" % string.join(cmd))
def doexec(args, inputtext=None): """Execute a subprocess, then return its return code, stdout and stderr""" proc = xPopen3(args, True) if inputtext != None: proc.tochild.write(inputtext) stdout = proc.fromchild stderr = proc.childerr rc = proc.wait() return (rc,stdout,stderr)
def forkHelper(cmd, fd, inputHandler, closeToChild): child = None if type(fd) == type([]): child = xPopen3(cmd, True, -1, fd) else: child = xPopen3(cmd, True, -1, [fd])