响应提示
我正在尝试做这样的事情:
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
?
我建议使用调用的列表形式。
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引用的参数。