I've closed your report at http://sourceforge.net/bugs/?func=detailbug&bug_id=110676&group_id=5470 That is a bug in the application code. The slave tries to write 6000 bytes to stderr, and blocks after writing 4096 (number measured on Linux, more generally, after _PC_PIPE_BUF bytes). The server starts reading on stdin, and blocks also, so you get a deadlock. The proper solution is to use import popen2 r,w,e = popen2.popen3 ( 'python slave.py' ) e.readlines() r.readlines() r.close() e.close() w.close() as the master, and import sys,posix e = sys.stderr.write w = sys.stdout.write e(400*'this is a test\n') posix.close(2) w(400*'this is another test\n') as the slave. Notice that stderr must be closed after writing all data, or readlines won't return. Also notice that posix.close must be used, as sys.stderr.close() won't close stderr (apparently due to concerns that assigning to sys.stderr will silently close is, so no further errors can be printed). In general, it would be better to use select(2) on the files returned from popen3, or spread the reading of the individual files onto several threads. Regards, Martin