Github: https://github.com/tartley/colorama
- ダウンロードとドキュメント:
- http://pypi.python.org/pypi/colorama
- ソースコードと開発:
- https://github.com/tartley/colorama
説明
ANSIエスケープ文字シーケンス(カラーのターミナルテキストとカーソルの位置付けを生成するため)をMS Windowsで動作させます。
ANSIのエスケープ文字シーケンスは、長い間、UnixやMac上でカラーのターミナルテキストとカーソルの位置を生成するために使用されてきました。 Coloramaは、 stdout
をラップし、見つかったANSIシーケンス(出力にgobbledygookとして表示される)を取り除き、それらをターミナルの状態を変更するための適切なwin32呼び出しに変換することで、Windowsでもこの作業を行います。 他のプラットフォームでは、Coloramaは何もしません。
Coloramaはまた、ANSIシーケンスを生成するのに役立ついくつかのショートカットを提供しますが、慣れ親しんだTermcolor( http://pypi.python.org/pypi/termcolor )や素晴らしいBlessings( https: //pypi.python.org/pypi/blessings )。
これは、Pythonからカラー端末テキストを印刷するための単純なクロスプラットフォームAPIを提供しています。ANSIシーケンスを使用して既存のアプリケーションやライブラリをLinuxやMac上でカラー出力することは、Windows colorama.init()
呼び出すだけです。
代わりの方法として、Windowsマシンにansi.sys
をインストールする方法があります。これは、端末で実行されているすべてのアプリケーションに対して同じ動作を提供します。 Coloramaは、それが簡単ではない状況を想定しています(たとえば、アプリにインストーラーがないなど)。
ソースコードリポジトリのデモスクリプトは、ANSIシーケンスを使用して色付きのテキストを印刷します。 Colormanを使用してWindowsコマンドプロンプトに対して、Gnome端末のANSI処理で構築された出力を比較します。
これらのスクリーングラブは、WindowsではColoramaがANSIの「暗いテキスト」をサポートしていないことを示しています。 それは ‘普通のテキスト’と同じように見えます。
ライセンス
Copyright Jonathan Hartley 2013. BSD 3条項ライセンス。 LICENSEファイルを参照してください。
依存関係
Python以外のものはありません。 Python 2.7,3.4,3.5、および3.6でテストされています。
使用法
初期化
アプリケーションは、次の方法でColoramaを初期化する必要があります。
from colorama import init
init()
Windowsでは、 init()
を呼び出すと、 stdout
またはstderr
送信されたテキストからANSIエスケープシーケンスがフィルタリングされ、同等のWin32呼び出しで置き換えられます。
他のプラットフォームでは、 init()
呼び出しは何の効果もありません(他のオプション機能を要求しない限り、下記の「InitキーワードArgs」を参照してください)。 これにより、アプリケーションはすべてのプラットフォームで無条件にinit()
を呼び出すことができます。その後、ANSI出力が機能します。
プログラムが終了する前にcoloramaの使用を止めるには、単にdeinit()
呼び出します。 これにより、 stdout
とstderr
が元の値に復元され、Coloramaが無効になります。 再びreinit()
使用を再開するには、 reinit()
呼び出します。 init()
もう一度呼び出すほうが安いです(同じことをします)。
カラー出力
カラーテキストのクロスプラットフォーム印刷は、ANSIエスケープシーケンスのColoramaの定数省略形を使用して行うことができます。
from colorama import Fore, Back, Style
print(Fore.RED + 'some red text')
print(Back.GREEN + 'and with a green background')
print(Style.DIM + 'and in dim text')
print(Style.RESET_ALL)
print('back to normal now')
…または単にあなた自身のコードからANSIシーケンスを手動で印刷することによって:
print('\033[31m' + 'some red text')
print('\033[30m') # and reset to default color
…または、ColoramaはTermcolorのような既存のANSIライブラリと一緒に楽しく使用できます:
from colorama import init
from termcolor import colored
# use Colorama to make Termcolor work on Windows too
init()
# then use Termcolor for all colored text output
print(colored('Hello, World!', 'green', 'on_red'))
使用可能な書式定数は次のとおりです。
Fore: BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, RESET. Back: BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, RESET. Style: DIM, NORMAL, BRIGHT, RESET_ALL
Style.RESET_ALL
、前景、背景、および明るさをリセットします。 Coloramaはプログラムの終了時にこのリセットを自動的に実行します。
カーソルの位置
カーソルの位置を変更するANSIコードがサポートされています。 それらを生成する方法の例については、 demos/demo06.py
を参照してください。
InitキーワードArgs
init()
はいくつかの**kwargs
を受け取り、デフォルト動作を上書きします。
- init(autoreset = False):
-
すべての印刷の最後に色の変更を無効にするためにリセットシーケンスを繰り返し送信すると、
init(autoreset=True)
は次のことを自動化します:from colorama import init init(autoreset=True) print(Fore.RED + 'some red text') print('automatically back to default color again')
- init(strip = None):
-
True
またはFalse
を渡すと、ANSIコードを出力から取り除く必要があるかどうかを上書きできます。 デフォルトの動作は、Windowsの場合、または出力が(ttyではなく)リダイレクトされているかどうかを取り除くことです。 - init(変換=なし):
-
True
またはFalse
を渡すと、出力のANSIコードをwin32呼び出しに変換するかどうかを上書きできます。 デフォルトの動作は、Windowsの場合はconvert、出力はtty(端末)の場合です。 - init(wrap = True):
-
Windowsでは、coloramaは
sys.stdout
とsys.stderr
をプロキシオブジェクトで置き換えsys.stderr
プロキシオブジェクトは.write()
メソッドをオーバーライドして作業を行います。 このラッピングによって問題が発生した場合は、init(wrap=False)
を渡すことで無効にすることができます。 デフォルトでは、autoreset
またはstrip
またはconvert
がTrueの場合は折り返します。折り返しが無効になっている場合、Windows以外のプラットフォームでのカラー印刷は通常どおり続行されます。 クロスプラットフォームのカラー出力を行うには、
AnsiToWin32
のAnsiToWin32
プロキシを直接使用することができます。import sys from colorama import init, AnsiToWin32 init(wrap=False) stream = AnsiToWin32(sys.stderr).stream # Python 2 print >>stream, Fore.BLUE + 'blue text on stderr' # Python 3 print(Fore.BLUE + 'blue text on stderr', file=stream)
ステータスと既知の問題
私は個人的にWindows XP(CMD、Console2)、Ubuntu(gnome-terminal、xterm)、およびOS Xでのみテストしました。
おそらく有効なANSIシーケンスは認識されませんが(詳細は下を参照してください)、私の知る限り誰もまだこれについて不平を言いません。 パズルリング。
未解決の問題とウィッシュリストをご覧ください : https : //github.com/tartley/colorama/issues
何かがあなたにとってうまくいかない、あるいは期待したことや期待したことをしなかった場合は、その問題のリストを聞いて喜んでパッチに喜んでいただき、誰かが1つまたは2つの作業パッチを提出します。
認識されたANSIシーケンス
ANSIシーケンスは、一般的に次の形式をとります。
ESC [<param>; <param> … <command>
<param>
は整数で、 <command>
は1文字です。 0個以上のパラメータが<command>
渡されます。 paramsが渡されない場合は、通常、1つのゼロを渡すことと同義です。 シーケンス内にスペースはありません。 より簡単に読むためにここに挿入されています。
coloramaがwin32呼び出しに変換する唯一のANSIシーケンスは次のとおりです。
ESC [ 0 m # reset all (colors and brightness) ESC [ 1 m # bright ESC [ 2 m # dim (looks same as normal brightness) ESC [ 22 m # normal brightness # FOREGROUND: ESC [ 30 m # black ESC [ 31 m # red ESC [ 32 m # green ESC [ 33 m # yellow ESC [ 34 m # blue ESC [ 35 m # magenta ESC [ 36 m # cyan ESC [ 37 m # white ESC [ 39 m # reset # BACKGROUND ESC [ 40 m # black ESC [ 41 m # red ESC [ 42 m # green ESC [ 43 m # yellow ESC [ 44 m # blue ESC [ 45 m # magenta ESC [ 46 m # cyan ESC [ 47 m # white ESC [ 49 m # reset # cursor positioning ESC [ y;x H # position cursor at x across, y down ESC [ y;x f # position cursor at x across, y down ESC [ n A # move cursor n lines up ESC [ n B # move cursor n lines down ESC [ n C # move cursor n characters forward ESC [ n D # move cursor n characters backward # clear the screen ESC [ mode J # clear the screen # clear the line ESC [ mode K # clear the line
'm'
コマンドに対する複数の数値パラメータは、1つのシーケンスにまとめることができます:
ESC [ 36 ; 45 ; 1 m # bright cyan text on magenta background
フォームのESC [ <param> ; <param> ... <command>
ESC [ <param> ; <param> ... <command>
はWindows上の出力から静かに削除されます。
1文字コードや代替の最初の文字など、他の形式のANSIシーケンスは認識されず、取り除かれません。 それを追加するのはクールだろう。 あなたがGitHubの問題を介してあなたに役立つかどうか教えてください。
開発
ヘルプと修正を歓迎します!
テストを実行するには、
- Michael Foordの
mock
モジュールをインストールする。 - テストは
unittest
への2010年時代のアップデートを使用して書かれていunittest
テストを実行するには:
python -m unittest discover -p *_test.py
これは、他の便利なコマンドのように、 Makefile
取り込まれMakefile
。
noseを使用してテストを実行する場合は、 -s
フラグを渡す必要があります。 それ以外の場合、 nosetests
は独自のプロキシをstdout
適用します。これは単体テストを混乱させます。
ありがとう
- Python2.5の
setup.py
修正のためのMarc Schlaich(schlamar) - #7のsetuptools / distutilsの議論を解決する解決策やその他の修正を提供するMarc Abramowitzは、閉鎖
stdout
で終了時のクラッシュを報告して解決しました。 - ctypes.windllを正しくインスタンス化するためのガイダンスについては、ユーザー ‘eryksun’を
ctypes.windll
。 - Matthew McCormickは、非勝利で長年のクラッシュを丁寧に指摘してくれた。
- ベン・ホイトは、64ビット版のWindowsの下で壮大な修正を行っています。
- READMEにある例の修正を提出するためのEmpty SquareのJesse
- ユーザー ‘jamessp’は、カーソルの位置決めのための観察文書の修正です。
- ユーザー ‘vaal1239’、Dave Mckee&Lackner Kristofが、非常に必要なWin7の修正を行った。
- Julien Stuyckさん、READMEへのPython3互換のアップデートを賢明に示唆しました。
- Daniel Griffithさんの複数の素晴らしいパッチがあります。
- Oscar Lestaは、ANSI文字を非tty出力に送るのを止める貴重な修正をしました。
- Roger Binns、多くの提案、貴重なフィードバック、およびバグレポート。
- ティムゴールデンは思想のために、最初のアイデアについて多くの評価をいただきました。
- READMEファイルの更新については、ユーザー ‘Zearin’を参照してください。
- 明色のサポートを追加するJohn Szakmeister
- デモにドキュメントを追加したCharles Merriam
- Jurkoは64ビット版Windows CPython2.5の修正版を提供しています
- Florian BruhinがstdoutまたはstderrがNoneの場合の修正
- WindowsでValueErrorを修正するThomas Weininger
- READMEファイルへのGithubの統合と修正のためのRemi Rampin
- Simeon Visserが ‘with’を使ってファイルハンドルを閉じ、Python 3.3と3.4を含むようにクラシファイアを更新する
- LIGHT_EX色のRESETを修正したAndy Neff
- Jonathan Hartleyの初期のアイデアと実装