3
所以我試圖從子流程中有效地在管道中創建一個「分支」。這個想法是用Popen將文件加載到管道的stdout中。然後,我可以將該stdout發送給兩個(或更多)標準輸入。這或多或少起作用。當進程需要看到EOF時,問題就出現了。據我所知,當你在子進程中使用通信(無)時會發生這種情況。但是,它也似乎取決於我試圖發送數據的兩個進程的順序。子流程溝通:訂單事宜?
#!/usr/bin/env python
from subprocess import *
import shutil
import os
import shlex
inSub=Popen(shlex.split('cat in.txt'),stdout=PIPE)
print inSub.poll()
queue=[]
for i in range(0,3):
temp=Popen(['cat'],stdin=PIPE)
queue=queue+[temp]
while True:
# print 'hi'
buf=os.read(inSub.stdout.fileno(),10000)
if buf == '': break
for proc in queue:
proc.stdin.write(buf)
queue[1].communicate()
print queue[1].poll()
只要我使用queue[1]
,東西掛在communicate()
線。但如果我使用queue[2]
,事情不會掛起。這是怎麼回事?它不應該取決於子流程的創建順序嗎?
(該in.txt文件真的可以是任何東西,也沒關係。)
順便說一句,如果你不希望孩子進程將它們的輸出打印到屏幕中,將其標準輸出管道的好。 –