结构脚本的彩色输出

时间:2013-09-05 11:14:18

标签: python deployment fabric

我正在尝试从结构脚本中为输出着色,所以我做了类似的事情:

local("hg pull")
print(blue(local("hg update")))
local("hg status")

我希望'hg update'响应以蓝色打印,但我得到下一行'hg status'的结果为蓝色。

在Fabric文档中,有一些着色硬编码字符串的示例,它们按照我的预期工作。您对我如何只对一个本地命令进行颜色响应有任何建议吗?

2 个答案:

答案 0 :(得分:6)

这就是我使用的:

local("hg pull")
res = local("hg update", capture=True)
print(blue(res))
local("hg status")

[编辑]您还需要capture=True来获取输出。

答案 1 :(得分:3)

结构中的颜色函数用于简单字符串,而不用于命令输出。但您可以实现自己的上下文管理器进行着色:

from contextlib import contextmanager
BLUE = 34  # https://github.com/fabric/fabric/blob/1.7/fabric/colors.py#L40

@contextmanager
def colored_output(color):
    print("\033[%sm" % color, end="")
    yield
    print("\033[0m", end="")

with colored_output(BLUE):
    local("hg update")

实现目标的另一种方法是使用local(..., capture=True),但在命令完成(help on local command)之前,您将看不到任何输出。