diff --git a/platformio/__main__.py b/platformio/__main__.py index b1872fd2..5c9b0da0 100644 --- a/platformio/__main__.py +++ b/platformio/__main__.py @@ -101,6 +101,18 @@ def main(): except: # pylint: disable=bare-except pass + # Handle IOError issue with colorama/VSCode + click_echo_origin = click.echo + + def _echo(*args, **kwargs): + try: + click_echo_origin(*args, **kwargs) + except IOError: + (sys.stderr.write if kwargs.get("err") else + sys.stdout.write)("%s\n" % (args[0] if args else "")) + + click.echo = _echo + cli(None, None, None) except Exception as e: # pylint: disable=W0703 if not isinstance(e, exception.ReturnErrorCode): diff --git a/platformio/managers/platform.py b/platformio/managers/platform.py index 3ee2b19f..6497b00f 100644 --- a/platformio/managers/platform.py +++ b/platformio/managers/platform.py @@ -15,7 +15,6 @@ import base64 import os import re -import sys from imp import load_source from multiprocessing import cpu_count from os.path import basename, dirname, isdir, isfile, join @@ -395,10 +394,7 @@ class PlatformRunMixin(object): fg = (None, "yellow", "red")[level - 1] if level == 1 and "is up to date" in line: fg = "green" - try: - click.secho(line, fg=fg, err=level > 1) - except IOError: - (sys.stderr.write if level > 1 else sys.stdout.write)(line + "\n") + click.secho(line, fg=fg, err=level > 1) @staticmethod def get_job_nums():