My python script uses subprocess to call a linux utility that is very noisy. I want to store all of the output to a log file and show some of it to the user. I thought the following would work, but the output doesn't show up in my application until the utility has produced a significant amount of output.
# fake_utility.py, just generates lots of output over time
import time
i = 0
while True:
print(hex(i)*512)
i += 1
time.sleep(0.5)
In the parent process:
import subprocess
proc = subprocess.Popen(['python', 'fake_utility.py'], stdout=subprocess.PIPE)
for line in proc.stdout:
# the real code does filtering here
print("test:", line.rstrip())
The behavior I really want is for the filter script to print each line as it is received from the subprocess, like tee
does but within Python code.
What am I missing? Is this even possible?
print line,
instead ofprint line.rstrip()
(note: comma at the end). – Unmeaningsubprocess.communicate()
– Unmeaning