gpt4 book ai didi

python - 并行运行多个子进程,在屏幕上显示所有输出,直到完成

转载 作者:行者123 更新时间:2023-11-30 23:10:14 24 4
gpt4 key购买 nike

我正在学习 python,需要一些帮助。以下代码执行 4 个子进程命令。每个命令都会依次执行,并显示所有输出和错误。如何保留等待和显示所有输出的行为,但同时执行多个命令?我看过running several system commands in parallel这似乎接近我认为我想要的,但不确定如何使其工作并维护每个进程的标准输出的输出。

def execute(command):
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
while True:
nextline = process.stdout.readline()
if nextline == '' and process.poll() != None:
break
sys.stdout.write(nextline)
sys.stdout.flush()

output = process.communicate()[0]
returncode = process.returncode

if (returncode == 0):
return output
else:
raise Exception("%s %s %s" % (command, returncode, output))

execute(cmd1)
execute(cmd2)
execute(cmd3)
execute(cmd4)

最佳答案

在我看来,您的函数可能会因为这一部分而等待:

  while True:
nextline = process.stdout.readline()
if nextline == '' and process.poll() != None:
break
sys.stdout.write(nextline)
sys.stdout.flush()

output = process.communicate()[0]

您应该在对第一个命令调用communicate() 之前对所有命令调用Popen()。

例如。

a = Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True)
b = Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True)
c = Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True)
# wait for them to finish
astdout, astderr = a.communicate()
bstdout, bstderr = b.communicate()
cstdout, cstderr = c.communicate()

print astdout
print bstdout
print cstdout

关于python - 并行运行多个子进程,在屏幕上显示所有输出,直到完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30783553/

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