2013-09-05 28 views
5

Próbuję pokolorować moje wyjście ze skryptu tkaniny, więc robię coś takiego:Kolorowe wyjście ze skryptu tkaniny

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

Spodziewałem się, że mają „hg update” drukuj odpowiedzi na niebiesko, ale zamiast Otrzymuję wynik następnego wiersza "status hg" na niebiesko.

W dokumentacji Fabric znajdują się przykłady z kolorami zakodowanymi na sztywno, które działają zgodnie z oczekiwaniami. Czy masz jakąś radę na temat tego, jak mogę odpowiedzieć kolorem tylko na jedno lokalne polecenie?

+1

Tylko dla pełnego obrazu dla początkujących: '' from fabric.colors import blue, green, red'' (itp.) Importuje kolory w Fabric. Zobacz dokument [docs] (http://docs.fabfile.org/en/latest/api/core/colors.html). – Peterino

Odpowiedz

6

To co mam użyć:

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

[Edit] również potrzebują capture=True sprowadzić wyjście.

+1

Teraz działa (z capture = True). Próbuję zapisać to w jednym wierszu jako print (niebieski (lokalny ("aktualizacja hg", capture = True))) i nadal drukuje dane wyjściowe w kolorze niebieskim. Wielkie dzięki! – Grzegorz

3

Funkcje kolorów w tkaninie dotyczą prostych ciągów, a nie poleceń. Ale można zaimplementować własną menedżera kontekstowe do barwienia:

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") 

Innym sposobem achive twoim celem jest wykorzystanie local(..., capture=True), ale nie będzie widać żadnego wyjścia, dopóki komenda jest skończony (help on local command).

+0

Daje to 'SyntaxError: niepoprawna składnia' wskazująca na' end = "" " –