From 43544a431ca958b411d6b84c7093f03e48461349 Mon Sep 17 00:00:00 2001 From: Segev Finer Date: Mon, 24 Jul 2017 15:17:39 +0300 Subject: [PATCH] Early import colorama so that it get's the correct terminal --- _pytest/capture.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/_pytest/capture.py b/_pytest/capture.py index 481bc2549..be93eef2b 100644 --- a/_pytest/capture.py +++ b/_pytest/capture.py @@ -37,6 +37,7 @@ def pytest_load_initial_conftests(early_config, parser, args): ns = early_config.known_args_namespace if ns.capture == "fd": _py36_windowsconsoleio_workaround() + _colorama_workaround() _readline_workaround() pluginmanager = early_config.pluginmanager capman = CaptureManager(ns.capture) @@ -473,6 +474,24 @@ class DontReadFromInput: raise AttributeError('redirected stdin has no attribute buffer') +def _colorama_workaround(): + """ + Ensure colorama is imported so that it attaches to the correct stdio + handles on Windows. + + colorama uses the terminal on import time. So if something does the + first import of colorama while I/O capture is active, colorama will + fail in various ways. + """ + + if not sys.platform.startswith('win32'): + return + try: + import colorama # noqa + except ImportError: + pass + + def _readline_workaround(): """ Ensure readline is imported so that it attaches to the correct stdio