Цветной вывод из текстового скрипта

Я пытаюсь раскрасить свой вывод из текстового скрипта, поэтому я делаю что-то вроде этого:

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

Я ожидал, что ответ 'hg update' будет напечатан синим цветом, но вместо этого я получу результат следующей строки 'hg status' синим цветом.

В документации Fabric есть примеры с раскрашиванием жестко закодированных строк, которые работают, как я ожидаю. Есть ли у вас какие-либо советы о том, как я могу покрасить ответ только на одну локальную команду?

2 ответа

Решение

Это то, что я использую:

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

[Изменить] вам также нужно capture=True чтобы получить вывод.

Цветовые функции в ткани предназначены для простых строк, а не для вывода команд. Но вы можете реализовать свой собственный менеджер контекста для раскраски:

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), но вы не увидите никакого вывода, пока команда не будет завершена ( справка по локальной команде).

Другие вопросы по тегам