Well, the example code at http://www.python.org/doc/2.6.2/library/subprocess.html#replacing-shell-pipeline has the same issue:
output=`dmesg | grep hda` ==> p1 = Popen(["dmesg"], stdout=PIPE) p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE) output = p2.communicate()[0] After communicate() returns, if you wait for p1 to finish (by calling p1.poll() repeatedly or p1.wait()), you can hang if the conditions described in the original post are true, i.e. p1 wrote lots of data to the pipe and p2 failed without reading much data from the pipe. Perhaps the doc can be improved to remind folks to close p1.stdout if the calling process doesn't need it, unless wait() is changed to close it and p1.wait() is called. Am I making any sense here? -- http://mail.python.org/mailman/listinfo/python-list