class _SysRedirectWrapper(object): def __init__(self, output_observer, stdout_prefix='[stdout] ', stderr_prefix='[stderr] '): self.__stdout = sys.stdout self.__stderr = sys.stderr self.redirect = Redirect(output_observer) self.__stdout_proxy = self.redirect.write_wrapper(stdout_prefix) self.__stderr_proxy = self.redirect.write_wrapper(stderr_prefix) def __enter__(self): sys.stdout = self.__stdout_proxy sys.stderr = self.__stderr_proxy self.redirect.start() return self # noinspection PyUnusedLocal def __exit__(self, exc_type, exc_val, exc_tb): self.redirect.stop() sys.stdout = self.__stdout sys.stderr = self.__stderr