2012-06-15 24 views
2

我需要自动执行以下命令POPEN包含需要说的是所有输出

cmd="yes | vgremove <vgname>" 

,每当我与

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

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

回答

6

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

Popen('vgremove -f <vgname>') 

至于具体你的问题:

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

管道是一个shell的功能,所以你需要对shell=True。如果没有shell=True,您正在执行的操作是使用参数执行yes。永不停止执行,因此子进程永不返回。