コード スニペット: http://docs.python.org/3/library/subprocess.html#replacing-shell-pipeline
output=`dmesg | grep hda`
# becomes
p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
p1.stdout.close() # Allow p1 to receive a SIGPIPE if p2 exits.
output = p2.communicate()[0]
質問: この行が必要な理由がよくわかりません: p1.stdout.close()
? これを行うことで、データの出力が完全に完了する前に p1 stdout が閉じられ、p2 がまだ生きている場合はどうなりますか? p1.stdout
すぐに閉鎖することで、それを危険にさらしていませんか?これはどのように作動しますか?