From: Peter Palfrader Date: Tue, 14 May 2013 20:34:53 +0000 (+0200) Subject: Use a regular pipe to transport apt's output X-Git-Url: https://git.donarmstrong.com/?p=dsa-puppet.git;a=commitdiff_plain;h=48bc7ea6289b52409b355c4f0a08bbb27128eae6 Use a regular pipe to transport apt's output --- diff --git a/modules/porterbox/files/dd-schroot-cmd b/modules/porterbox/files/dd-schroot-cmd index e82a71c8..76f3c9d1 100755 --- a/modules/porterbox/files/dd-schroot-cmd +++ b/modules/porterbox/files/dd-schroot-cmd @@ -106,20 +106,26 @@ class WrappedRunner(): cmdstr = ' '.join(pipes.quote(s) for s in cmd) cmd = ['unshare', '--uts', '--ipc', '--net', '--'] cmd += ['sh', '-c', 'ip addr add 127.0.0.1/8 dev lo && ip link set dev lo up && %s'%(cmdstr)] - pid, fd = pty.fork() + (r, w) = os.pipe() + pid, ptyfd = pty.fork() if pid == pty.CHILD: + os.close(r) fd = os.open("/dev/null", os.O_RDWR) os.dup2(fd, 0) # stdin + os.dup2(w, 1) # stdout + os.dup2(w, 2) # stderr os.execlp(cmd[0], *cmd) + os.close(w) try: while 1: - b = os.read(fd, 1) + b = os.read(r, 1) if b == "": break sys.stdout.write(b) except OSError, e: if e[0] == EIO: pass else: raise - os.close(fd) + os.close(r) + os.close(ptyfd) # we don't care about that one p,v = os.waitpid(pid, 0) s,r = WrappedRunner.get_ret(v) return s,r