diff --git a/_pytest/capture.py b/_pytest/capture.py index 481bc2549..b627e5102 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 diff --git a/changelog/2510.bugfix b/changelog/2510.bugfix new file mode 100644 index 000000000..e6fcb7c74 --- /dev/null +++ b/changelog/2510.bugfix @@ -0,0 +1 @@ +Fix terminal color changing to black on Windows if ``colorama`` is imported in a ``conftest.py`` file.