[PATCH 2/5] dts: skip first line of send_command output
Juraj Linkeš
juraj.linkes at pantheon.tech
Wed Apr 17 15:18:13 CEST 2024
On Tue, Apr 16, 2024 at 2:15 PM Luca Vizzarro <Luca.Vizzarro at arm.com> wrote:
>
> On 16/04/2024 09:48, Juraj Linkeš wrote:
> > Oh, the first commit message was confusing. It said leading prompt
> > which I understood to be the first prompt (the one with the command).
> > I see that this commit actually addresses what I thought the first
> > commit was trying to do.
>
> Yes, my bad!
>
> >> - def send_command(self, command: str, prompt: str | None = None) -> str:
> >> + def send_command(
> >> + self, command: str, prompt: str | None = None, skip_first_line: bool = False
> >
> > Do we generally want or don't want to include the first line? When do
> > we absolutely not want to include it?
>
> In the case of `show port info/stats {x}` if the provided port is
> invalid, then the first message starts with `Invalid port`. By providing
> an output that skips the command prompt, this is easily checked with
> output.startswith("Invalid port") as you may have noticed in the next
> commit. Otherwise it'd be a bit more complicated. Personally, I am not
> sure whether we care about the first line. With my limited knowledge I
> don't see a reason to include it (just as much as the trailing prompt).
>
> >> + ) -> str:
> >> """Send `command` and get all output before the expected ending string.
> >>
> >> Lines that expect input are not included in the stdout buffer, so they cannot
> >> @@ -121,6 +123,7 @@ def send_command(self, command: str, prompt: str | None = None) -> str:
> >> command: The command to send.
> >> prompt: After sending the command, `send_command` will be expecting this string.
> >> If :data:`None`, will use the class's default prompt.
> >> + skip_first_line: Skip the first line when capturing the output.
> >>
> >> Returns:
> >> All output in the buffer before expected string.
> >> @@ -132,6 +135,9 @@ def send_command(self, command: str, prompt: str | None = None) -> str:
> >> self._stdin.flush()
> >> out: str = ""
> >> for line in self._stdout:
> >> + if skip_first_line:
> >> + skip_first_line = False
> >> + continue
> >
> > Is there ever a reason to distinguish between the first line and the
> > line with the command on it?
>
> As above, not really sure. Would this always be a command prompt? The
> doubt arises only because I don't understand why we'd need the command
> prompt fed back.
>
The only thing I could think of is debugging. Maybe it could offer
some extra insight in some corner cases.
> >
> >> if prompt in line and not line.rstrip().endswith(
> >> command.rstrip()
> >> ): # ignore line that sent command
> >> --
> >> 2.34.1
> >>
>
More information about the dev
mailing list