Path: blob/master/thirdparty/colorama/initialise.py
2992 views
# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.1import atexit2import contextlib3import sys45from .ansitowin32 import AnsiToWin32678orig_stdout = None9orig_stderr = None1011wrapped_stdout = None12wrapped_stderr = None1314atexit_done = False151617def reset_all():18if AnsiToWin32 is not None: # Issue #74: objects might become None at exit19AnsiToWin32(orig_stdout).reset_all()202122def init(autoreset=False, convert=None, strip=None, wrap=True):23global wrapped_stdout, wrapped_stderr24global orig_stdout, orig_stderr2526if orig_stdout is not None:27return2829if not wrap and any([autoreset, convert, strip]):30raise ValueError('wrap=False conflicts with any other arg=True')3132orig_stdout = sys.stdout33orig_stderr = sys.stderr3435if sys.stdout is None:36wrapped_stdout = None37else:38sys.stdout = wrapped_stdout = \39wrap_stream(orig_stdout, convert, strip, autoreset, wrap)40if sys.stderr is None:41wrapped_stderr = None42else:43sys.stderr = wrapped_stderr = \44wrap_stream(orig_stderr, convert, strip, autoreset, wrap)4546global atexit_done47if not atexit_done:48atexit.register(reset_all)49atexit_done = True505152def deinit():53global orig_stdout54global orig_stderr5556if orig_stdout is not None:57sys.stdout = orig_stdout58orig_stdout = None59if orig_stderr is not None:60sys.stderr = orig_stderr61orig_stderr = None626364@contextlib.contextmanager65def colorama_text(*args, **kwargs):66init(*args, **kwargs)67try:68yield69finally:70deinit()717273def reinit():74if wrapped_stdout is not None:75sys.stdout = wrapped_stdout76if wrapped_stderr is not None:77sys.stderr = wrapped_stderr787980def wrap_stream(stream, convert, strip, autoreset, wrap):81if wrap:82wrapper = AnsiToWin32(stream,83convert=convert, strip=strip, autoreset=autoreset)84if wrapper.should_wrap():85stream = wrapper.stream86return stream8788899091