GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

tartley

colorama – Pythonでの単純なクロスプラットフォームカラーのターミナルテキスト

投稿日:

Pythonでの単純なクロスプラットフォームカラーのターミナルテキスト

ダウンロードとドキュメント:
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()呼び出します。 これにより、 stdoutstderrが元の値に復元され、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.stdoutsys.stderrをプロキシオブジェクトで置き換えsys.stderrプロキシオブジェクトは.write()メソッドをオーバーライドして作業を行います。 このラッピングによって問題が発生した場合は、 init(wrap=False)を渡すことで無効にすることができます。 デフォルトでは、 autoresetまたはstripまたはconvertがTrueの場合は折り返します。

折り返しが無効になっている場合、Windows以外のプラットフォームでのカラー印刷は通常どおり続行されます。 クロスプラットフォームのカラー出力を行うには、 AnsiToWin32AnsiToWin32プロキシを直接使用することができます。

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の初期のアイデアと実装







-tartley

執筆者: