3

我有一个 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)

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

4

3 回答 3

4

由于 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')
于 2017-04-03T12:15:56.690 回答
1

看起来需要对织物进行修补才能获得您想要的东西。这个应该可以让你到达那里:https ://github.com/opie4624/fabric/compare/master...return-codes

于 2012-09-25T23:36:09.110 回答
1

您可以将 append 添加; echo $?到您的命令中,并将退出代码作为字符串文字返回。

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

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

于 2014-08-12T10:17:16.073 回答