仅调用python返回代码状态

时间:2015-03-30 13:23:04

标签: python

我在python中有以下代码:

i = call(["salt-cloud", "-m", fileName, "--assume-yes"])
print (i)

i始终为0,因为操作已完成。

问题是我想获得此操作的输出。在我们的案例中:

window:
    ----------
    Error:
        ----------
        Not Deployed:
            Failed to start Salt on host window

是运行salt-cloud -m fileName --assume-yes的输出,它表示此过程中出现错误,我想知道它。

如何在Python中实现它?

2 个答案:

答案 0 :(得分:3)

使用check_output并抓住CalledProcessError,这将针对任何非零退出状态引发:

from subprocess import check_output, CalledProcessError    

try:
    out = check_call(["salt-cloud", "-m", fileName, "--assume-yes"]) 
    print(out)   
except CalledProcessError as e:
    print(e.message)

如果您使用的是python< 2.7你需要在python 2.7中添加Popencheck_callcheck_output

from subprocess import Popen, PIPE

p = Popen(["salt-cloud", "-m", filename, "--assume-yes"],stderr=PIPE,stdout=PIPE)

out, err = p.communicate()

print( err if err else out)

答案 1 :(得分:2)

假设您正在使用subprocess.call,您可能需要查看subprocess.check_output(),它将子流程的输出作为字节字符串返回。