我正在尝试使用 popen 启动一个一个接一个调用两个命令(带有多个参数)的子进程。第二个命令依赖于运行的第一个命令,所以我希望使用单个子进程来运行这两个命令,而不是生成两个进程并等待第一个。
但是我遇到了问题,因为我不确定如何提供两个命令输入或将命令作为一个对象分开。
另外,如果可能的话,我试图避免将 shell 设置为 true。
这基本上是我想要做的:
for test in resources:
command = [
'pgh',
'resource',
'create',
'--name', test['name'],
'--description', test['description'],
]
command2 = [
'pgh',
'assignment',
'create',
'--name', test['name'],
'--user', test['user'],
]
p = Popen(command, stdout=PIPE, stderr=PIPE)
stdout, stderr = p.communicate()
print(stdout)
print(stderr)
最佳答案
在启动另一个命令之前,您必须启动命令并等待完成。您应该对每个命令重复执行此操作。
这可以作为
ps = [ Popen(c, stdout=PIPE, stderr=PIPE).communicate()
for c in command]
备注 无论天气如何,这都会启动下一个命令,第一个命令成功或失败。如果您只想在上一个命令成功时启动下一个命令,请使用
def check_execute(commands):
return_code = 0
for c in commands:
p = Popen(c, stdout=PIPE, stderr=PIPE)
result = p.communicate()
yield result
return_code = p.returncode
if return_code != 0:
break
关于python subprocess popen同步命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44648872/