5

我正在尝试为织物脚本的输出着色,所以我做了这样的事情:

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

我希望将“hg update”响应打印为蓝色,但是我得到了下一行“hg status”的蓝色结果。

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

4

2 回答 2

6

这就是我使用的:

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

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

于 2013-09-05T11:43:09.157 回答
3

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

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),但在命令完成之前您不会看到任何输出(本地命令帮助)。

于 2013-09-05T11:56:19.190 回答