title: Python capture stdout from subprocess line by line
body: <p>I've read many of the questions related to this and learned a lot but I still haven't been able to solve my problem. I'm building a wxPython app that runs a c++ executable and displays the stdout from that executable in real time. I've run into several strange results trying to make this work. Here's my current setup/problem:</p>
  
  <pre><code>//test.cc (compiled as test.out with gcc 4.5.2)
  #include &lt;stdio.h&gt;
  int main()
  {
    FILE* fh = fopen("output.txt", "w");
    for (int i = 0; i &lt; 10000; i++)
    {
        printf("Outputting: %d\n", i);
        fprintf(fh, "Outputting: %d\n", i);
    }
    fclose(fh);
    return 0;
  }
  
  #wxPythonScript.py (running on 2.7 interpreter)
  def run(self):
    self.externalBinary = subprocess.Popen(['./test.out'], shell=False, stdout=subprocess.PIPE)
    while not self.wantAbort:
        line = self.externalBinary.stdout.readline()
        wx.PostEvent(self.notifyWindow, Result_Event(line, Result_Event.EVT_STDOUT_ID))
      print('Subprocess still running')
    print('Subprocess aborted smoothly')
  </code></pre>
  
  <p>If I run the above code the subprocess takes a very long time to complete, even though all it has to do is write out the data and exit. However if I run the following it completes very quickly:</p>
  
  <pre><code>#wxPythonScript.py (running on 2.7 interpreter)
  def run(self):
    outFile = open('output.txt', 'r+')
    self.externalBinary = subprocess.Popen(['./test.out'], shell=False, stdout=outFile)
    while not self.wantAbort:
        #line = self.externalBinary.stdout.readline()
        #wx.PostEvent(self.notifyWindow, Result_Event(line, Result_Event.EVT_STDOUT_ID))
      print('Subprocess still running')
    print('Subprocess aborted smoothly')
  </code></pre>
  
  <p>So basically whenever I redirect stdout from the subprocess to a PIPE it slows down/hangs, but if I write it to a file or don't redirect it at all then it's fine. Why is that?</p>