diff --git a/espefuse/__init__.py b/espefuse/__init__.py index 777d53f41d..8fa3912597 100755 --- a/espefuse/__init__.py +++ b/espefuse/__init__.py @@ -20,6 +20,7 @@ import espefuse.efuse.esp32s3beta2 as esp32s3beta2_efuse import esptool +from esptool.loader import REDIRECT_ERRORS DefChip = namedtuple("DefChip", ["chip_name", "efuse_lib", "chip_class"]) @@ -294,7 +295,10 @@ def _main(): try: main() except esptool.FatalError as e: - print("\nA fatal error occurred: %s" % e) + print( + "\nA fatal error occurred: %s" % e, + file=sys.stderr if REDIRECT_ERRORS else sys.stdout, + ) sys.exit(2) diff --git a/espsecure/__init__.py b/espsecure/__init__.py index 3e5ef20396..49b113a1db 100755 --- a/espsecure/__init__.py +++ b/espsecure/__init__.py @@ -23,6 +23,7 @@ import ecdsa import esptool +from esptool.loader import REDIRECT_ERRORS SIG_BLOCK_MAGIC = 0xE7 @@ -1810,7 +1811,10 @@ def _main(): try: main() except esptool.FatalError as e: - print("\nA fatal error occurred: %s" % e) + print( + "\nA fatal error occurred: %s" % e, + file=sys.stderr if REDIRECT_ERRORS else sys.stdout, + ) sys.exit(2) except ValueError as e: try: @@ -1818,7 +1822,8 @@ def _main(): print( "Note: This error originates from the cryptography module. " "It is likely not a problem with espsecure, " - "please make sure you are using a compatible OpenSSL backend." + "please make sure you are using a compatible OpenSSL backend.", + file=sys.stderr if REDIRECT_ERRORS else sys.stdout, ) finally: raise diff --git a/esptool/__init__.py b/esptool/__init__.py index 0e8569497d..ad75db931d 100644 --- a/esptool/__init__.py +++ b/esptool/__init__.py @@ -65,7 +65,12 @@ write_mem, ) from esptool.config import load_config_file -from esptool.loader import DEFAULT_CONNECT_ATTEMPTS, ESPLoader, list_ports +from esptool.loader import ( + DEFAULT_CONNECT_ATTEMPTS, + ESPLoader, + REDIRECT_ERRORS, + list_ports, +) from esptool.targets import CHIP_DEFS, CHIP_LIST, ESP32ROM from esptool.util import ( FatalError, @@ -1072,23 +1077,30 @@ def _main(): try: main() except FatalError as e: - print(f"\nA fatal error occurred: {e}") + print( + f"\nA fatal error occurred: {e}", + file=sys.stderr if REDIRECT_ERRORS else sys.stdout, + ) sys.exit(2) except serial.serialutil.SerialException as e: - print(f"\nA serial exception error occurred: {e}") + file = sys.stderr if REDIRECT_ERRORS else sys.stdout + print(f"\nA serial exception error occurred: {e}", file=file) print( "Note: This error originates from pySerial. " "It is likely not a problem with esptool, " - "but with the hardware connection or drivers." + "but with the hardware connection or drivers.", + file=file, ) print( "For troubleshooting steps visit: " - "https://docs.espressif.com/projects/esptool/en/latest/troubleshooting.html" + "https://docs.espressif.com/projects/esptool/en/latest/troubleshooting.html", # noqa: E501 + file=file, ) sys.exit(1) except StopIteration: - print(traceback.format_exc()) - print("A fatal error occurred: The chip stopped responding.") + file = sys.stderr if REDIRECT_ERRORS else sys.stdout + print(traceback.format_exc(), file=file) + print("A fatal error occurred: The chip stopped responding.", file=file) sys.exit(2) diff --git a/esptool/loader.py b/esptool/loader.py index 88f1b77d48..a6d1cf63c4 100644 --- a/esptool/loader.py +++ b/esptool/loader.py @@ -96,6 +96,8 @@ DEFAULT_CONNECT_ATTEMPTS = cfg.getint("connect_attempts", 7) # Number of times to try writing a data block WRITE_BLOCK_ATTEMPTS = cfg.getint("write_block_attempts", 3) +# Redirect errors to stderr +REDIRECT_ERRORS = cfg.getboolean("redirect_errors", False) STUBS_DIR = os.path.join(os.path.dirname(__file__), "targets", "stub_flasher") diff --git a/flasher_stub/esptool_test_stub.py b/flasher_stub/esptool_test_stub.py index 691495e11b..ab8bc2e828 100755 --- a/flasher_stub/esptool_test_stub.py +++ b/flasher_stub/esptool_test_stub.py @@ -32,5 +32,8 @@ try: esptool.main() except esptool.FatalError as e: - print("\nA fatal error occurred: %s" % e) + print( + "\nA fatal error occurred: %s" % e, + file=sys.stderr if globals()["redirect_errors"] else sys.stdout, + ) sys.exit(2) diff --git a/flasher_stub/wrap_stub.py b/flasher_stub/wrap_stub.py index 504d9f8837..9121ace2eb 100755 --- a/flasher_stub/wrap_stub.py +++ b/flasher_stub/wrap_stub.py @@ -13,8 +13,10 @@ import os.path import sys -sys.path.append("..") import esptool # noqa: E402 +from esptool.loader import REDIRECT_ERRORS + +sys.path.append("..") THIS_DIR = os.path.dirname(__file__) BUILD_DIR = os.path.join(THIS_DIR, "build") @@ -52,7 +54,7 @@ def wrap_stub(elf_file): stub.get("data_start", 0), stub["entry"], ), - file=sys.stderr, + file=sys.stderr if REDIRECT_ERRORS else sys.stdout, ) return stub