1
我正在使用subprocess.*
從python3程序運行一個命令管道;我不希望 通過一個shell,因爲我將參數傳遞給我的子命令,並確保這些不會被shell誤解會是噩夢。當啓動順序改變時,正在運行管道子進程會產生不同的結果?
的subprocess
文檔給出瞭如何做到這一點的例子:
p1 = Popen(command1, stdout=PIPE)
p2 = Popen(command2, stdin=p1.stdout)
p2.wait()
p1.wait()
這種運作良好。不過,我想知道,如果這將是更安全的生產商之前開始消費,所以
p2 = Popen(command2, stdin=PIPE)
p1 = Popen(command1, stdout=p2.stdin)
p2.wait()
p1.wait()
我預計在完全相同的方式表現,但顯然他們沒有。第一個代碼完美無缺地工作;第二,我的程序掛起;如果我看看系統,我可以看到p1已經死了,等待被收割,並且p2永遠掛起。對此有沒有合理的解釋?
哇,看起來你是對的。但我仍不明白爲什麼這是必需的。行爲差異在哪裏出現?在子進程調用exec()之後,他們所做的是在父控制之外,對吧?父母的GC可以參與嗎? – b0fh 2010-08-27 20:47:43
@ b0fh,這對我來說也不清楚。 – Constantin 2010-08-28 19:29:40