6
科17.1.4.2: Replacing shell pipeline說更換解釋例如從Python子模塊的Python的子模塊
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]
第三行中的註釋解釋了爲什麼近函數被調用,但不是爲什麼它是有道理的。它對我沒有。在調用通信方法之前不會關閉p1.stdout阻止通過管道發送任何輸出? (顯然它不會,我試圖運行代碼,它運行良好)。 爲什麼是否需要調用close來使p1接收SIGPIPE?什麼樣的關閉是不關閉的?到底什麼呢?
請考慮這是一個學術問題,除了更好地理解這些東西之外,我並不試圖完成任何事情。
stdin和stdout是文件。所以你應該關閉它們以釋放管道。 – JBernardo 2011-05-18 15:10:14