New submission from Steven K. Wong <slid...@hotmail.com>: The example code at http://www.python.org/doc/2.6.2/library/subprocess.html#replacing-shell-pipeline should be updated to add the close() call noted below:
output=`dmesg | grep hda` ==> p1 = Popen(["dmesg"], stdout=PIPE) p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE) p1.stdout.close() # <----- this line is not in the doc, but we should add it output = p2.communicate()[0] The parent process does not use p1.stdout after passing it to p2, so it should close p1.stdout after that. If it is not closed, there is a possibility for p1's process to never terminate if p2's process fails. The following code demonstrate this situation: from subprocess import Popen, PIPE import time # p1 is a program that writes lots of data to the pipe cmd = ['cat', 'a_large_file'] p1 = Popen(cmd, stdout=PIPE) # p2 is a program that fails without reading much data from the pipe cmd = ['python', '-c', 'import time; time.sleep(5); asdf'] p2 = Popen(cmd, stdin=p1.stdout, stdout=PIPE) output = p2.communicate()[0] while p1.poll() is None: # it loops forever print 'sleep a bit' time.sleep(1) ---------- assignee: georg.brandl components: Documentation messages: 97606 nosy: georg.brandl, steven.k.wong severity: normal status: open title: subprocess.Popen pipeline example code in the documentation is lacking versions: Python 2.6 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue7678> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com