对于openstack CLI,Python中subprocess.check_output的输出为空

时间:2017-03-24 18:04:41

标签: python subprocess

我尝试使用python

中的子进程执行OpenStack CLI openstack volume list | grep -w my_vm1
output = subprocess.check_output(cmd, shell=True)

在这种情况下

cmd = 'openstack volume list | grep -w my_vm1'. 

我观察到输出为空。我试过的时候:

output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)

如果我打印输出var,它会显示“type'exception.OSError'”。我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

您似乎遇到了OSError异常。

我通常在try / expect中运行子进程命令来捕获问题,并使用pipe和communic()从命令中获取输出。我发现这种流程更具逻辑性。

这样的事情:

try:
    cmd = 'openstack volume list | grep -w my_vm1'
    output = subprocess.check_output(cmd, 
                                     stdout=subprocess.PIPE,
                                     stderr=subprocess.PIPE)
    out, err = p.communicate()
    print(out)
except OSError:
    print(err)
    sys.exit(1)

当然,您可以作为运行脚本的同一用户运行该命令,它应该可以工作。如果没有,这应该显示一些错误消息,授予该规则正在播放命令。

我希望这有帮助!