2012-06-15 26 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。永不停止執行,因此子進程永不返回。