Đây là những gì tôi có thể đọc trong python module tài liệu trình con:stdout đóng cửa của đường ống python subprocess
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.
Tôi thực sự không hiểu tại sao chúng ta phải đóng p1.stdout sau khi đã tạo p2. Khi nào được thực thi chính xác p1.stdout.close()? Điều gì sẽ xảy ra khi p2 không bao giờ kết thúc? Điều gì sẽ xảy ra khi kết thúc hoặc p1 hoặc p2?
Điều đó là đúng, điều này quan trọng nếu quá trình đầu tiên có thể chạy lâu hơn quá trình thứ hai. –