我需要自动执行以下命令
cmd="yes | vgremove <vgname>"
每当我使用
编写此命令时Popen(cmd.split(),stdout=PIPE,stderr=PIPE)
它没有完成。我怀疑它等待命令完成,所以管道被击中,是否有替代方案???
答案 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
的情况下,您正在使用参数执行yes
。 yes
永远不会停止执行,因此子进程永远不会返回。