diff --git a/esphome/__main__.py b/esphome/__main__.py index cfbfc2a4b1..360940b3b9 100644 --- a/esphome/__main__.py +++ b/esphome/__main__.py @@ -733,7 +733,7 @@ def upload_using_esptool( esptool.main, *cmd, line_callbacks=line_callbacks ) # pylint: disable=no-member - return run_external_process(*cmd) + return run_external_process(*cmd, line_callbacks=line_callbacks) rc = run_esptool(first_baudrate) if rc == 0 or first_baudrate == 115200: diff --git a/esphome/util.py b/esphome/util.py index 066f6848ad..029ba1793d 100644 --- a/esphome/util.py +++ b/esphome/util.py @@ -127,7 +127,7 @@ class RedirectText: def __init__( self, out, - filter_lines: str | None = None, + filter_lines: list[str] | None = None, line_callbacks: list[Callable[[str], str | None]] | None = None, ) -> None: self._out = out @@ -273,14 +273,19 @@ def run_external_process(*cmd: str, **kwargs: Any) -> int | str: full_cmd = " ".join(shlex_quote(x) for x in cmd) _LOGGER.debug("Running: %s", full_cmd) filter_lines = kwargs.get("filter_lines") + line_callbacks = kwargs.get("line_callbacks") capture_stdout = kwargs.get("capture_stdout", False) if capture_stdout: sub_stdout = subprocess.PIPE else: - sub_stdout = RedirectText(sys.stdout, filter_lines=filter_lines) + sub_stdout = RedirectText( + sys.stdout, filter_lines=filter_lines, line_callbacks=line_callbacks + ) - sub_stderr = RedirectText(sys.stderr, filter_lines=filter_lines) + sub_stderr = RedirectText( + sys.stderr, filter_lines=filter_lines, line_callbacks=line_callbacks + ) try: proc = subprocess.run(