Fabric 的“hide("everything")”实际上隐藏了什么?

What does Fabric's `hide("everything")` actually hide?

当我使用 hide("everything") 上下文管理器并且结构任务失败时,我仍然收到一条消息。 docs 读作:

everything: Includes warnings, running, user and output (see above.) Thus, when turning off everything, you will only see a bare minimum of output (just status and debug if it’s on), along with your own print statements.

但这不是严格意义上的,对吧? -- 我看到状态、调试和中止消息。

如果我真的想隐藏所有内容,有没有比以下更好的方法:

with hide("aborts"), hide("everything"):
    ...

这是我一直用的:

from fabric.state import output

output['everything'] = False

如有疑问,请查看来源:

https://github.com/fabric/fabric/blob/master/fabric/context_managers.py#L98

这里是实际声明。 everything 几乎就是一切:warnings, running, user, output, exceptions

https://github.com/fabric/fabric/blob/master/fabric/state.py#L411

它只是 output 的一个很好的包装器。坦率地说,我会坚持使用他们的 build-in 装饰器,因为它改变的可能性较小,而且您可以获得更多 pythonic-readable 代码的附加值:

@task
def task1():
    with hide('running', 'stdout', 'stderr'):
        run('ls /var/www')
        ....

对比

@task
def task1():
    output['running'] = False
    output['stdout'] = False
    output['stderr'] = False
    # or just output['everything'] = False
    run('ls /var/www')
    ....

但是,归根结底还是一样。