输出管理
fab
的输出默认情况下是非常复杂的,几乎是将尽可能地输出所有能输出的内容,包括远程的 stderr 和 stdout 输出流、被执行的命令,等等。在很多情况下,为了了解远程的执行进度这是必须的,但是对于复杂的 Fabric 任务,很快就跟不上它的运行状态。
输出等级
为了改进任务输出,Fabric 的输出会被整合进一系列基本独立的层级或者集合,其中每一个都以独立开启或关闭。这为用户端的输出提供了灵活的控制。
注解
所有层级的输出在 debug
和 exceptions
情况下默认都会保存下来。
标准输出层级
标准的原子输出层级/集合包括以下:
status:状态信息。包括提示 Fabric 已结束运行、用户是否使用键盘中止操作、或者服务器是否断开了连接。通常来说这些信息都不会很冗长,但是至关重要。
aborts:终止信息。和状态信息一样,只有当 Fabric 做为库使用的时候才可能应该关闭,而且还并不一定。注意,即使该输出集被关闭了,并不能阻止程序退出——你只会得不到任何 Fabric 退出的原因。
warnings:警报信息。通常在预计指定操作失败时会将其关闭,比如说你可能使用
grep
来测试文件中是否有特定文字。如果设置env.warn_only
为True
会导致远程程序执行失败时完全没有警报信息。和aborts
一样,这项设置本身并不控制警报行为,仅用于是否输出警报信息。running:输出正在执行的命令或者正在传输的文件名称,比如:
[myserver] run: ls /var/www
。同时它还输出正在运行的任务名,比如:[myserver] Executing task 'foo'
。stdout:本地或远程的 stdout。来自命令行的非错误输出。
stderr:本地或远程的 stderr。比如命令中错误相关的输出。
user:用户生成的输出。比如:fabfile 中使用
fastprint
或者puts
函数产生的输出。
在 0.9.2 版更改: running
输出级别中新增 “Executing task” 行。
在 0.9.2 版更改: 添加 user
输出级别。
调试输出
在调试问题的时候还有几个可用的原子输出级别:debug
,和其它的都有所不同;exceptions
,其行为只能包含在 debug
中,不过也可以单独设定。
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 traceback(如果exceptions
也启用了的话)。注解
修改其它输出(比如上面例子中修改“running”那一行来显示 shell 以及任何转译字符),这项设置的优先级处于最高;因此如果
running
为 False 但debug
为 True,你还是可以在调试区看到 “running”那一行。exceptions:异常发生时是否显示 traceback。如果你对详细的错误信息感兴趣,但
debug
为False
时可以使用。
在 1.0 版更改: 终止时的调试输出现在会包含整个 Python traceback。
在 1.11 版更改: 新增 exceptions
输出级别。
输出级别的别名
作为对上述原子/独立级别的补充,Fabric 还提供了一系列方便的对应多个级别的别名,这可能会涉及到一些其它级别涉及的地方,可以用于高效地切换它所对应的级别的状态。
output:对应
stdout
和stderr
。如果你只关心“运行”进度和自己设置的输出(和警报),会觉得它很方便。everything:包括
warnings
、running
、user
和output
(见上面介绍)。因此,关闭everything
,你将只能够看到零星输出(只有status
和debug
,如果它们是开启状态的话),以及自己的打印信息。commands:包含
stdout
和running
。适合用于隐藏无错误的命令,只显示所有 stderr 输出。
在 1.4 版更改: 新增 commands
的输出别名。
隐藏和/或显示输出级别
你可以通过多种方式切换 Fabric 的输出层级,你可以看看下面每条对应的 API 文档作为例子:
直接修改 fabric.state.output:
fabric.state.output
是字典的子类(类似于 env),以输出层级名为键,值为真(显示某个层级的输出)或假(隐藏)。fabric.state.output
是最底层的输出层级实现,也是 Fabric 决定是否输出的直接引用。上下文管理器:
hide
和show
是决定被包含的命令输出是隐藏还是显示的两个上下文管理器,接受一个或多个层级字符串名做为参数。和其它上下文管理器一样,退出被包含的代码块时,设置会恢复原状。参见
settings
可以在内部嵌套调用hide
以及/或者show
。命令行参数:你可以使用 fab 选项和参数
--hide
以及/或者--show
,其效果正如其名(不过,如你所想,会是全局应用),其参数应当是逗号分隔的字符输入。