Вот что я могу прочитать в документации модуля подпроцесса python:
Replacing shell pipeline
output=`dmesg | grep hda`
==>
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]
The p1.stdout.close() call after starting the p2 is important in order for p1
to receive a SIGPIPE if p2 exits before p1.
Я не понимаю, почему нам нужно закрыть p1.stdout после создания p2. Когда точно выполняется p1.stdout.close()? Что происходит, когда p2 никогда не заканчивается? Что происходит, когда не заканчиваются p1 или p2?