2013-09-05 39 views
5

Sto cercando di colorare la mia uscita dallo script in tessuto, in modo da fare qualcosa di simile:uscita colorato dallo script tessuto

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

mi aspettavo di avere la stampa di risposta 'hg update' in blu, ma invece Ottengo il risultato della riga successiva 'stato hg' in blu.

Nella documentazione di Fabric sono presenti esempi con stringhe con codifica a colori che funzionano come previsto. Hai qualche consiglio su come posso colorare la risposta a un singolo comando locale?

+1

Solo per un'immagine completa per i principianti: '' da fabric.colors import blu, verde, rosso' (ecc.) Importa i colori in Fabric. Vedi [i documenti] (http://docs.fabfile.org/en/latest/api/core/colors.html). – Peterino

risposta

6

Questo è quello che uso:

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

[Edit] è inoltre necessario il capture=True per andare a prendere l'uscita.

+1

Ora funziona (con capture = True). Provo a scrivere questo in una riga come stampa (blu (local ("hg update", capture = True))) e stampa ancora l'output in colore blu. Molte grazie! – Grzegorz

3

Le funzioni di colore nel fabric sono per stringhe semplici, non per l'output di comando. Ma è possibile implementare il proprio gestore di contesto per la colorazione:

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

Un altro modo per achive il vostro obiettivo è quello di utilizzare local(..., capture=True), ma non si vedrà alcun output fino a quando il comando è finito (help on local command).

+0

Questo fornisce 'SyntaxError: invalid syntax' che punta a' end = "" ' –