一尘不染

在远程Shell中使用Fabric进行run()调用时,能否捕获错误代码?

python

通常,只要run()调用返回非零退出代码,Fabric就会退出。但是,对于某些电话,这是预期的。例如,当PNGOut无法压缩文件时,它将返回错误代码2。

目前,我只能通过使用shell逻辑(do_something_that_fails || truedo_something_that_fails || do_something_else)来规避此限制,但我希望能够将逻辑保留在纯Python中(Fabric承诺)。

有没有一种方法可以检查错误代码并对错误代码做出反应,而不是让Fabric死机而死?我仍然希望其他呼叫具有默认行为,因此通过修改环境来更改其行为似乎不是一个好选择(据我所知,您只能使用它来警告它而不是死亡)。


阅读 160

收藏
2021-01-20

共1个答案

一尘不染

您可以通过使用settings上下文管理器和以下warn_only设置来防止中止非零退出代码:

from fabric.api import settings

with settings(warn_only=True):
    result = run('pngout old.png new.png')
    if result.return_code == 0: 
        do something
    elif result.return_code == 2: 
        do something else 
    else: #print error to user
        print result
        raise SystemExit()

更新: 我的答案已经过时。请参阅下面的评论。

2021-01-20