当前位置: 首页 > 面试题库 >

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

郤坚诚
2023-03-14
问题内容

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

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

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


问题答案:

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

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



 类似资料:
  • 我想使用MinGW DebugServer.exe从我的笔记本电脑调试正在开发计算机(作为远程计算机)上运行的进程。但我遇到了一个问题“创建进程”D:\RemotedBG\xxx.exe时出错“,(错误50):请求不受支持”。我使用Visual Studio2013构建了xxx.exe,并尝试使用MinGW GDBServer进行远程调试。 如果这是不可行的,你可以推荐我任何方法做远程调试在Win

  • 我正在使用node。js创建一个web应用程序。运行应用程序时(通过在浏览器上打开index.html或在终端上使用“npm start”命令),会出现两个错误: 未捕获引用错误:未定义进程 未捕获引用错误:未定义require 我解决了“require is not defined”错误,特别是在我的索引中加入了。html头标记指向此脚本的链接,其中定义了require函数。但是,我找不到与pr

  • 我通过maven-archetype-mojo创建了一个maven插件。我的intellij版本是:intellij 2018.1.7 并且我已经尝试了以下步骤来启动远程调试过程。 我创建了一个远程调试配置并将其指向端口8000 我在项目文件夹的终端中运行mvnDebug clean install,它显示: 准备在调试模式下执行Maven,侦听地址为8000的传输dt_socket null

  • 问题内容: 每当客户端单击打印屏幕按钮时,我都需要捕获一个网页屏幕以将其存储在客户端计算机上。为此,我通过在jsp页面中嵌入带有签名的小程序(受信任的小程序)来进行搜索。因此,我正在尝试为独立的Java类使用一个简单的applet。成功后,我可以在签署了applet后尝试使用jsp。我试过的是: 我得到这个: 任何帮助,任何想法都会得到应用。 问题答案: 我解决了这个问题。我所做的只是将这些行粘贴

  • 我试图捕捉错误60并继续执行脚本,下面是我目前正在做的事情: 它返回这个: 回溯(最后一次调用):文件“debug.py”,第13行,在urlopen return\u opener中的soup=BeautifulSoup(urlib2.urlopen(url,timeout=10))文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/

  • 问题内容: 在我的socket.io代码中, ip始终返回127.0.0.1,这是因为服务器位于代理后面。如何正确获取远程地址? 编辑:我正在使用http代理 问题答案: 是的,这对我有用。 我正确获取了远程IP地址而不是127.0.0.1