私はサブプロセスからパイプに効果的に "ブランチ"を作成しようとしています。ポッペンのファイルをパイプのstdoutにロードすることです。その後、私はstdoutを2つ(またはそれ以上)のstdinに送ることができます。これは多かれ少なかれ動作します。この問題は、プロセスがEOFを参照する必要があるときに発生します。私が知る限り、これは、サブプロセスで通信(なし)を使用する場合に発生します。しかし、それはまた私がデータを送信しようとしている2つのプロセスを生み出した順序に依存するようです。サブプロセス通信:注文事項は?
#!/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ファイルは本当に何もすることができ、それは問題ではありません。)
ところで、としてPIPEへの標準出力を設定しますよく –