gnac
gnac

Reputation: 1643

Strip positional information from subprocess std out

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

Answers (1)

Tim Roberts
Tim Roberts

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

Related Questions