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

发布于 2021-01-29 15:09:13

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

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

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

关注者
0
被浏览
97
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您可以通过使用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()
    

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看