通常,只要run()调用返回非零退出代码,Fabric就会退出.但是,对于某些电话,这是预期的.例如,PNGOut在无法压缩文件时返回错误代码2.
目前我只能通过使用shell逻辑(do_something_that_fails || true
或do_something_that_fails || do_something_else
)来绕过这个限制,但我宁愿能够将我的逻辑保存在普通的Python中(就像Fabric承诺一样).
有没有办法检查错误代码并对其做出反应而不是让Fabric出现恐慌并死掉?我仍然想要其他调用的默认行为,因此通过修改环境来改变它的行为似乎不是一个好的选择(据我所知,你只能使用它来告诉它警告而不是死亡).
这与我之前的问题有关,但与之不同.
我有以下fabfile:
from fabric.api import *
host1 = '192.168.200.181'
offline_host2 = '192.168.200.199'
host3 = '192.168.200.183'
env.hosts = [host1, offline_host2, host3]
env.warn_only = True
def df_h():
with settings(warn_only=True):
run("df -h | grep sda3")
Run Code Online (Sandbox Code Playgroud)
输出是:
[192.168.200.199] run: df -h | grep sda3
Fatal error: Low level socket error connecting to host 192.168.200.199: No route to host
Aborting.
Run Code Online (Sandbox Code Playgroud)
执行到达脱机服务器后,无论env.hosts列表中的其他服务器如何,它都会立即中止.
我使用了env设置"warn_only = True",但也许我使用它不正确.
如何修改此行为以便它只打印错误并继续执行?