Skip to content

Instantly share code, notes, and snippets.

@kvoss
Created December 5, 2012 04:00
Show Gist options
  • Save kvoss/4212073 to your computer and use it in GitHub Desktop.
Save kvoss/4212073 to your computer and use it in GitHub Desktop.
buggy output capturing
class MutedOutput(object):
def __init__(self):
self.null_fds = [os.open(os.devnull, os.O_RDWR) for _ in xrange(2)]
self.savd_fds = None
self.pipe = os.pipe() # (r, w) FDs tuple
def __enter__(self):
self.savd_fds = os.dup(1), os.dup(2)
#os.dup2(self.null_fds[0], 1)
os.dup2(self.pipe[1] , 1)
os.dup2(self.null_fds[1], 2)
# XXX: I'd like to return os.fdopen(self.pipe[0]) but it blocks
return self.pipe[0]
def __exit__(self, type, value, traceback):
os.dup2(self.savd_fds[0], 1)
os.dup2(self.savd_fds[1], 2)
os.close(self.pipe[0])
os.close(self.pipe[1])
os.close(self.savd_fds[0])
os.close(self.savd_fds[1])
os.close(self.null_fds[0])
os.close(self.null_fds[1])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment