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