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.


              if prompt in line and not line.rstrip().endswith(
                  command.rstrip()
              ):  # ignore line that sent command
--
2.34.1


Reply via email to