def communicate(cmds, **kwds): info(cmds) p = commands.shell_process(cmds, **kwds) if kwds.get("stdout", None) is None and commands.redirecting_io(sys=sys): output = commands.redirect_aware_commmunicate(p) else: output = p.communicate() if p.returncode != 0: template = "Problem executing commands {0} - ({1}, {2})" msg = template.format(cmds, output[0], output[1]) raise RuntimeError(msg) return output
def real_io(): """Ensure stdout and stderr have supported ``fileno()`` method. nosetests replaces these streams with :class:`StringIO` objects that may not work the same in every situtation - :func:`subprocess.Popen` calls in particular. """ original_stdout = sys.stdout original_stderr = sys.stderr try: if commands.redirecting_io(sys=sys): sys.stdout = sys.__stdout__ sys.stderr = sys.__stderr__ yield finally: sys.stdout = original_stdout sys.stderr = original_stderr