2

我需要自动化以下命令

cmd="yes | vgremove <vgname>"

每当我用

Popen(cmd.split(),stdout=PIPE,stderr=PIPE)

它没有完成。我怀疑它会等到命令完成,所以管道被敲击了,有没有替代方法???

4

2 回答 2

7

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

Popen('vgremove -f <vgname>')

具体到你的问题:

p = Popen(cmd.split(), stdout=PIPE, stderr=PIPE, stdin=PIPE)
p.stdin.write('yes')
于 2012-06-15T21:40:52.180 回答
3

管道是外壳功能,因此您需要shell=True它。您正在做的事情shell=True是使用参数执行yesyes永远不会停止执行,因此子进程永远不会返回。

于 2012-06-15T21:49:16.793 回答