我在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中实现它?
答案 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中添加Popen
,check_call
和check_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(),它将子流程的输出作为字节字符串返回。