Message 161356 - Python tracker
Personally, I would factor out the code for Popen.communicate() in to a Communicator class which wraps a Popen object and has a method
communicate(input, timeout=None) -> (bytes_written, output, error)
On Windows this would use threads, and on Unix, select.