如何响应os.system中的提示?

时间:2016-06-21 00:46:04

标签: python ssh vagrant

我正在尝试做这样的事情:

from subprocess import Popen
p = Popen(["vagrant", "ssh", "vmname", "-c", '"pvcreate -ff /dev/sdb"'])

但它需要用户输入。而且,无论如何这都行不通。他们给出了错误:bash: pvcreate -ff /dev/sdb: command not found,因为它正在寻找一个程序pvcreate -ff /dev/sdb,而不是带有参数的pvcreate。我也先试过这个:

p = Popen(["vagrant", "ssh", "vmname", "-c", "pvcreate", "-ff", "/dev/sdb"])

并且已经使用了这个:

os.system("vagrant ssh vmname -c 'pvcreate -ff /dev/sdb'")

然而,当它提示我时,我需要说是。我已经尝试过这些选项:

os.system("yes | vagrant ssh vmname -c 'pvcreate -ff /dev/sdb'")
os.system("echo y | vagrant ssh vmname -c 'pvcreate -ff /dev/sdb'")

是否可以使用os.system响应提示?

1 个答案:

答案 0 :(得分:3)

我建议使用调用列表形式。

import subprocess
command = ["vagrant", "ssh", "vmname", "-c", "pvcreate -ff /db/sdb"]
output,error  = subprocess.Popen(
                command, universal_newlines=True,
                stdout=subprocess.PIPE,  
                stderr=subprocess.PIPE).communicate()

这表示将要传递的参数集,并且无需使用shell引用。