Other than the one minor documentation nitpick, Reviewed-by: Juraj Linkeš <juraj.lin...@pantheon.tech>
<snip> > diff --git a/dts/framework/remote_session/interactive_shell.py > b/dts/framework/remote_session/interactive_shell.py > @@ -124,20 +130,34 @@ def send_command(self, command: str, prompt: str | None > = None) -> str: > > Returns: > All output in the buffer before expected string. > + > + Raises: > + InteractiveSSHSessionDeadError: The session died while executing > the command. > + InteractiveSSHTimeoutError: If command was sent but prompt could > not be found in > + the output before the timeout. > """ > self._logger.info(f"Sending: '{command}'") > if prompt is None: > prompt = self._default_prompt > - self._stdin.write(f"{command}{self._command_extra_chars}\n") > - self._stdin.flush() > out: str = "" > - for line in self._stdout: > - out += line > - if prompt in line and not line.rstrip().endswith( > - command.rstrip() > - ): # ignore line that sent command > - break > - self._logger.debug(f"Got output: {out}") > + try: > + self._stdin.write(f"{command}{self._command_extra_chars}\n") > + self._stdin.flush() > + for line in self._stdout: > + out += line > + if line.rstrip().endswith(prompt): > + break We should document the (currently) hidden assumption of us needing to use the extra command chars to force another prompt in the docstring. > + except TimeoutError as e: > + self._logger.exception(e) > + self._logger.debug( > + f"Prompt ({prompt}) was not found in output from command > before timeout." > + ) > + raise InteractiveSSHTimeoutError(command) from e > + except OSError as e: > + self._logger.exception(e) > + raise > InteractiveSSHSessionDeadError(self._interactive_session.hostname) from e > + finally: > + self._logger.debug(f"Got output: {out}") > return out > > def close(self) -> None: > -- > 2.44.0 >