Popen包含需要对所有输出说“是”的命令

时间:2012-06-15 21:36:45

标签: python subprocess pipe popen

我需要自动执行以下命令

cmd="yes | vgremove <vgname>"

每当我使用

编写此命令时
Popen(cmd.split(),stdout=PIPE,stderr=PIPE)

它没有完成。我怀疑它等待命令完成,所以管道被击中,是否有替代方案???

2 个答案:

答案 0 :(得分:7)

在这种情况下有一种更简单的方法:

Popen('vgremove -f <vgname>')

具体问题:

p = Popen(cmd.split(), stdout=PIPE, stderr=PIPE, stdin=PIPE)
p.stdin.write('yes')

答案 1 :(得分:3)

管道是一项shell功能,因此您需要shell=True。没有shell=True的情况下,您正在使用参数执行yesyes永远不会停止执行,因此子进程永远不会返回。