read subprocess stdout line by line
        Posted  
        
            by Caspin
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Caspin
        
        
        
        Published on 2010-05-10T16:47:31Z
        Indexed on 
            2010/05/10
            17:04 UTC
        
        
        Read the original article
        Hit count: 378
        
python
|subprocess
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, but only show some of it to the user. I thought the following would work, but the output does 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)
#filters output
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.  Sorta like what tee does but with python code.
What am I missing? Is this even possible?
© Stack Overflow or respective owner