Reputation: 1643
I am running a subprocess in python, capturing the std output:
results = subprocess.run(my_command, capture_output=True)
The command in question uses positional characters to update the number of packets sent, but in the resultant output, eg results.stdout, I see all of the updates.
Connecting (1 Packets Sent, 0 Packets Received, 0 Retries)\x1b[2K\r[\x1b[33m 0% \x1b[0m] Connecting (1 Packets Sent, 0 Packets Received, 0 Retries)\x1b[2K\r[\x1b[33m 0% \x1b[0m]
Ideally, I only want to save the final output, eg
[ERROR] Connecting (194 Packets Sent, 0 Packets Received, 193 Retries)
Not every one of the 194 interim lines. Is there a way do decode the stdout to only show the final string?
Upvotes: 0
Views: 29
Reputation: 54726
\x1b[2K
is the signal to erase the entire line. So this will get you the final thing printed:
lastline = output.rfind('\x1b[2K')
output = output[lastline+4:]
That still leave the other ANSI codes, but since this uses a fixed set, those should be easy to remove.
Upvotes: 1