title: Stop reading process output in Python without hang?
body: <p>I have a Python program for Linux almost looks like this one :</p>
  
  <pre><code>import os
  import time
  
  process = os.popen("top").readlines()
  
  time.sleep(1)
  
  os.popen("killall top")
  
  print process
  </code></pre>
  
  <p>the program hangs in this line :</p>
  
  <pre><code>process = os.popen("top").readlines()
  </code></pre>
  
  <p>and that happens in the tools that keep update outputting like "Top"</p>
  
  <p>my best trials :</p>
  
  <pre><code>import os
  import time
  import subprocess
  
  process = subprocess.Popen('top')
  
  time.sleep(2)
  
  os.popen("killall top")
  
  print process
  </code></pre>
  
  <p>it worked better than the first one (it's kelled ), but it returns :</p>
  
  <pre><code>&lt;subprocess.Popen object at 0x97a50cc&gt;
  </code></pre>
  
  <p>the second trial :</p>
  
  <pre><code>import os
  import time
  import subprocess
  
  process = subprocess.Popen('top').readlines()
  
  time.sleep(2)
  
  os.popen("killall top")
  
  print process
  </code></pre>
  
  <p>the same as the first one. It hanged due to "readlines()"</p>
  
  <p>Its returning should be like this :</p>
  
  <pre><code>top - 05:31:15 up 12:12,  5 users,  load average: 0.25, 0.14, 0.11
  Tasks: 174 total,   2 running, 172 sleeping,   0 stopped,   0 zombie
  Cpu(s):  9.3%us,  3.8%sy,  0.1%ni, 85.9%id,  0.9%wa,  0.0%hi,  0.0%si,  0.0%st
  Mem:   1992828k total,  1849456k used,   143372k free,   233048k buffers
  Swap:  4602876k total,        0k used,  4602876k free,  1122780k cached
  
    PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
  31735 Barakat   20   0  246m  52m  20m S 19.4  2.7  13:54.91 totem              
   1907 root      20   0 91264  45m  15m S  1.9  2.3  38:54.14 Xorg               
   2138 Barakat   20   0 17356 5368 4284 S  1.9  0.3   3:00.15 at-spi-registry    
   2164 Barakat    9 -11  164m 7372 6252 S  1.9  0.4   2:54.58 pulseaudio         
   2394 Barakat   20   0 27212 9792 8256 S  1.9  0.5   6:01.48 multiload-apple    
   6498 Barakat   20   0 56364  30m  18m S  1.9  1.6   0:03.38 pyshell            
      1 root      20   0  2880 1416 1208 S  0.0  0.1   0:02.02 init               
      2 root      20   0     0    0    0 S  0.0  0.0   0:00.02 kthreadd           
      3 root      RT   0     0    0    0 S  0.0  0.0   0:00.12 migration/0        
      4 root      20   0     0    0    0 S  0.0  0.0   0:02.07 ksoftirqd/0        
      5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 watchdog/0         
      9 root      20   0     0    0    0 S  0.0  0.0   0:01.43 events/0           
     11 root      20   0     0    0    0 S  0.0  0.0   0:00.00 cpuset             
     12 root      20   0     0    0    0 S  0.0  0.0   0:00.02 khelper            
     13 root      20   0     0    0    0 S  0.0  0.0   0:00.00 netns              
     14 root      20   0     0    0    0 S  0.0  0.0   0:00.00 async/mgr          
     15 root      20   0     0    0    0 S  0.0  0.0   0:00.00 pm
  </code></pre>
  
  <p>and save in the variable "process". Any I idea guys, I'm really stuck now ?</p>