示例#1
0
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