2013-09-05 8 views
5

私は生地スクリプトからの私の出力に色をしようとしているので、私はこのような何か:カラー出力

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

は私が青で「HG更新の応答プリントを持っていると予想し、代わりに次の行「hg status」の結果は青色で表示されます。

ファブリックのドキュメントには、ハードコーディングされた文字列を使用した例があります。あなたはただ一つのローカルコマンドに対する応答を色づける方法についてアドバイスをしていますか?

+1

初心者のための完全な画像だけです。「from fabric.colors import blue、green、red''(など)はFabricで色をインポートします。 [the docs](http://docs.fabfile.org/en/latest/api/core/colors.html)を参照してください。 – Peterino

答えて

6

これは私が使用するものです。

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

[編集]あなたはまた、出力を取得するためにcapture=Trueを必要としています。

+1

これで動作します(capture = Trueの場合)。私はこれをprint(青(local "" hg update "、capture = True))として1行に書き込もうとしますが、それでも青色で出力します。どうもありがとう! – Grzegorz

3

ファブリック内のカラー関数は、コマンド出力ではなく、単純な文字列用です。しかし、あなたは着色のために、独自のコンテキストマネージャを実装することができます:あなたの目標をachiveする

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)を使用することですが、コマンドは(help on local command)が終了するまでは、何も出力されません。

+0

これは、 'SyntaxError:無効な構文'を指し、 'end =" "' –

関連する問題