Skip to main content

管理输出

默认情况下,fab 工具非常详细,并打印出几乎所有可能的东西,包括远程端的stderr和stdout流,正在执行的命令字符串等等。虽然这在许多情况下是必要的,以便知道正在发生什么,任何非平凡的织物任务将很快变得难以跟随,因为它运行。

输出电平

为了帮助组织任务输出,结构输出被分组成多个不重叠的级别或组,每个可以独立地打开或关闭。这提供了对向用户显示的内容的灵活控制。

注解

默认情况下,所有级别(debugexceptions 除外)都处于启用状态。

标准输出电平

标准原子输出电平/组如下:

  • 状态:状态消息,即注意Fabric完成运行时,如果用户使用键盘中断,或当服务器断开连接时。这些消息几乎总是相关的,很少冗长。

  • 中止:中止消息。像状态消息,这些应该真的只有关闭时使用Fabric作为库,甚至可能不是。注意,即使这个输出组被关闭,中止仍然会发生 - 只是不会有任何输出关于为什么Fabric中止!

  • 警告:警告消息。当期望给定操作失败时,例如当使用 grep 来测试文件中的文本的存在时,这些常常被关闭。如果与将 env.warn_only 设置为True配对,当远程程序失败时,这可能导致完全无声的警告。与 aborts 一样,此设置不会控制实际的警告行为,仅控制警告消息是打印还是隐藏。

  • 运行:正在执行的命令或文件传输的打印输出,例如。 [myserver] run: ls /var/www。还控制正在运行的任务的打印,例如。 [myserver] Executing task 'foo'

  • 标准输出:本地或远程,stdout,即命令的无错误输出。

  • stderr:本地或远程,stderr,即命令的错误相关输出。

  • 用户:用户生成的输出,即通过使用 fastprintputs 函数由fabfile代码打印的本地输出。

在 0.9.2 版更改: 将“执行任务”行添加到 running 输出级别。

在 0.9.2 版更改: 添加了 user 输出电平。

调试输出

还有两个原子输出电平可用于故障排除:debug (其行为与其他操作略有不同)和 exceptions (其行为包含在 debug 中,但可以单独启用)。

  • 调试:打开调试(默认情况下关闭)。目前,这主要用于查看正在运行的“完整”命令;以这个 run 呼叫为例:

    run('ls "/home/username/Folder Name With Spaces/"')
    

    通常,running 线路将精确地显示传递给 run 的内容,如此:

    [hostname] run: ls "/home/username/Folder Name With Spaces/"
    

    使用 debug,并且假设您已将 shell 设置为 True,您将看到传递到远程服务器的字面的完整字符串:

    [hostname] run: /bin/bash -l -c "ls \"/home/username/Folder Name With Spaces\""
    

    启用 debug 输出还将在中止期间显示完整的Python跟踪(如果已启用 exceptions 输出)。

    注解

    在修改其他输出(例如在上面的例子中,它修改“运行”行显示shell和任何转义字符),这个设置优先于其他;因此如果 running 为False,但 debug 为True,则仍然会在调试窗体中显示“running”行。

  • 异常:当发生异常时允许显示回溯;用于当 debug 设置为 False 但仍然对详细的错误信息感兴趣。

在 1.0 版更改: 调试输出现在包括中止期间的完整Python跟踪。

在 1.11 版更改: 添加了 exceptions 输出电平。

输出电平别名

除了上面的原子/独立级别,Fabric还提供了一些方便的别名,映射到多个其他级别。这些可以在其他级别被引用的任何地方被引用,并且将有效地切换它们被映射到的所有级别。

  • 输出:映射到 stdoutstderr。当你只关心看到’running’行和你自己的print语句(和警告)时有用。

  • 一切:包括 warningsrunninguseroutput (见上文)。因此,当关闭 everything 时,您只会看到一个最小的输出(只有 statusdebug,如果它打开),以及您自己的打印语句。

  • 命令:包括 stdoutrunning。适用于完全隐藏非错误命令,同时仍显示任何stderr输出。

在 1.4 版更改: 添加了 commands 输出别名。

隐藏和/或显示输出电平

您可以通过多种方式切换Fabric的任何输出级别;例如,请参阅每个项目符号链接的API文档:

  • 直接修改fabric.state.outputfabric.state.output 是一个字典子类(类似于 环境),其键是输出级别名称,其值为True(显示特定类型的输出)或False(隐藏它)。

    fabric.state.output 是输出级别的最低级别实现,是Fabrics内部组件在决定是否打印输出时引用的内容。

  • 上下文管理器hideshow 是双字节上下文管理器,它将一个或多个输出级别名称作为字符串,并在包装块中隐藏或显示它们。与Fabric的其他上下文管理器一样,当块退出时,会恢复先前的值。

    参见

    settings,它可以嵌套对 hide 和/或 show 自身内部的调用。

  • 命令行参数:您可以使用 fab 选项和参数--hide 和/或 --show 参数,它们的行为完全类似于相同名称(但自然地,全局应用)的上下文管理器,并以逗号分隔字符串作为输入。