gpt4 book ai didi

python - 子进程通信 : order matters?

转载 作者:行者123 更新时间:2023-11-28 18:54:00 26 4
gpt4 key购买 nike

所以我试图在子进程的管道中有效地创建一个“分支”。这个想法是用 Popen 将文件加载到管道的标准输出中。然后,我可以将该标准输出发送到两个(或更多)标准输入。这或多或少是有效的。当进程需要看到 EOF 时,问题就来了。据我所知,当您在子进程上使用 communicate(None) 时会发生这种情况。但是,这似乎也取决于我生成我尝试向其发送数据的两个进程的顺序。

#!/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文件真的可以是任何东西,没关系。)

最佳答案

我看不出任何一个过程会有所不同的原因。在任何情况下,关闭标准输入管道将导致 Python 发送 EOF,结束进程:

...

while True:
# print 'hi'
buf = os.read(inSub.stdout.fileno(),10000)
if buf == '': break
for proc in queue:
proc.stdin.write(buf)

for proc in queue:
proc.stdin.close()

queue[1].communicate()

...

关于python - 子进程通信 : order matters?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7047872/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com