2017-05-31 10 views
0

python文字列の設定色は魅力的です。ここに私のPythonスクリプトから作業抜粋です:コードからANSI文字列を抽出ansi文字列がgetenvでロードされているときにAnsiColorプラグインが動作しない

All Tests OK. 

line = "All Tests OK." 
print('\033[31m \033[1m' + line + '\033[0m'); 

これは、このようなジェンキンスコンソール出力になりコードの読みやすさを向上させるために、カラー文字列とエスケープシーケンスをグローバルコンフィグレーションファイルに移動したいと思います。だから私は、ビルド環境のグローバル設定の束を持っている私のbuild.conf.batバッチファイルを持っており、それはこのようなANSICOLORための5つの変数が含ま:Pythonスクリプトで

set ansiBlue=\033[34m 
set ansiRed=... 

を私はすべてのそれらの環境変数にアクセスすることができますバッチ設定ファイルに定義されて

print(os.getenv('ansiBlue') + " " + line + os.getenv('ansiOff')) 

を使用してこれは、ANSIコードの文字列を返します。 はここまで、すべてが正常であるが、ジェンキンスは、ビルドを実行するときに、コンソール出力は次のようである:

\033[34m All Tests OK. \033[0m 

だから、手作業で作成した文字列は動作しますが、変数の文字列が動作しません。どうして? 私の質問は、これらの変数をJenkinsのコンソール出力で動作させるにはどうすればよいですか?

-

PS:私はすでに、その後の印刷(STR(testOutput))を使って文字列に変換された変数にconcatonated文字列をラップしているが、これはまだ成功していない。..

+2

Pythonのパーサは、エスケープ文字に '\ 033'を変換しますが、バッチパーサーはその翻訳を行いませんので、あなたの' os.getenv'は、バックスラッシュと3桁の数字を読み取ります。 ( '\\ 033'、 '\ 033')replaceはあなたの問題を解決する可能性があります。 –

+0

の 'replace'が動作するはずです。また、Latin-1のソーステキストでは、' codecs.decode(source_string、 'unicode_escape') 'を使うことができます。 – eryksun

+0

出力にダブルバックスラッシュを見たことはありませんが、replace()のヒントはうまくいきました。 – domih

答えて

0

で述べたように"@mc nd"バックスラッシュは何とか出力をエスケープし、envからのインポートはしませんでした。そこで、バックスラッシュを二重のバックスラッシュに置き換えることが今行われています。ありがとう!!

print(os.getenv('ansiBlue').replace('\\033', '\033') + line + os.getenv('ansiOff').replace('\\033', '\033')); 

これにより、コードの読みやすさが10分の1に向上します。そこで、置換コードをユーティリティファイルに外部化します。

print(util.ansiBlue + line + util.ansiOff); 
関連する問題