如何在结构中指定有效的非零返回码?

时间:2012-09-25 08:56:41

标签: python unix fabric

我有一个bash命令,用于指示非标准返回代码,以指示不同类型的成功和失败。

我想将此命令作为结构文件的一部分运行,同时白名单列出所有有效的返回代码。

from fabric.api import local
local('exit 5') # This will cause an abort even though it is expected behaviour

我希望做的事情如下:

from fabric.api import local, settings
with settigns(valid_exit_codes=[0,5]):
    local('exit 5')

我目前正在做一些事情:

with settings(warn_only=True):
    output = local('exit 5')

    if output.return_code in [0, 5]:
        return output.return_code
    else:
        abort("Non success return-code: %s" % output.return_code)

寻找更简单的解决方法的任何帮助都会很棒。

3 个答案:

答案 0 :(得分:2)

自Fabric 1.6起,ok_ret_codes中设置了env

http://docs.fabfile.org/en/1.13/usage/env.html#ok-ret-codes

所以你可以这样做:

    with fabric.api.settings(ok_ret_codes=[0, 2]):
        fabric.api.sudo('puppet agent -t')

答案 1 :(得分:1)

看起来需要一个面料补丁来获得你想要的东西。这个应该让你到那里:https://github.com/opie4624/fabric/compare/master...return-codes

答案 2 :(得分:1)

您可以在命令中添加; echo $?,只需将退出代码作为字符串文字返回。

assert local('(exit 5); echo $?').split()[-1] in "0 1 2 3 4 5"

这样做的好处是在warn_only生效时不输出警告。