Итак, я пытаюсь эффективно создать «ветку» в трубе из подпроцесса.Идея состоит в том, чтобы загрузить файл с Popen в стандартный поток канала.Затем я могу отправить этот стандартный вывод двум (или более) стандартным устройствам.Это работает, более или менее.Проблема возникает, когда процесс должен увидеть 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 действительно может быть любым, это не имеет значения.)