web-dev-qa-db-ja.com

Python用Colorama、Windowsでカラー印刷行を返さない

Python用のcoloramaをインストールしました。次のようにモジュールをインポートしました。

import colorama
from colorama import init
init()
from colorama import Fore, Back, Style

print Fore.RED + "My Text is Red"

そして、ANSI文字を返します。

esc[31mMy Text is Red

これは私が期待したものではありません。私は何か間違ったことをしていますか?.

ありがとう。

15
Mike

Windows 7 x64でも同じ問題が発生しましたが、init呼び出しに引数convert=Trueを追加するだけで、新しいものをインストールしなくても、ようやく色が機能するようになりました。

from colorama import init, Fore, Back, Style

init(convert=True)

print(Fore.RED + 'some red text')
15
hrbdg

Ansiconでパッチを適用せずに、Windowscmd.exeで色を機能させることに成功したことはありません。パッチを適用した後、ANSIカラーコードはcoloramaのようなものを使用しなくても機能します(これは私にとっても機能しませんでした)。

Cmd.exeにAnsiconでパッチを適用するには、次の手順を実行します。

  1. Ansiconを https://github.com/adoxa/ansicon/downloads からダウンロードし、スペースのないディレクトリに解凍します
  2. Cmdプロンプトを使用して、解凍した場所に移動します。
  3. X64ディレクトリにCDを挿入します(32ビットマシンを使用している場合を除き、x86マシンを使用します)
  4. タイプansicon.exe –i
  5. 新しいcmdプロンプトを開く

経由: https://stackoverflow.com/a/4749307/191902

また、NVidiaグラフィックカードをお持ちの場合は、環境変数「ANSICON_EXC」を「nvd3d9wrap.dll」に設定する必要がある場合があります。

5
Sean Lynch

私は遅れていることを知っていますが、これはうまくいけば、まだ答えを探している人に役立つでしょう。

PyPIに関するColoramaのドキュメント からの記述:

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

これは、Anaconda Prompt(本質的にはcmd.exe)Windows 1064ビットの場合。

ColoramaのネイティブANSIシーケンスは、何らかの理由で機能していないようです。外部のANSIライブラリ(つまり、Termcolor)が私のためにトリックを行いました。

2
babrar

これは非常に古い質問だと思いますが、既存の回答はどれも役に立たなかったので、他の人が同じ船に乗っている場合に備えて解決策を投稿します。私の場合、問題はstdoutからsysをインポートしてから、coloramaを初期化していたことでしたが、これは機能しません。

_>>> from colorama import Fore, Style, init
>>> from sys import stdout
>>> init()
>>> stdout.write(Fore.RED + Style.BRIGHT + "Test" + Style.RESET_ALL + "\n")
[31m[1mTest[0m
_

https://pypi.org/project/colorama ごとに、これは次の理由によるものです。

Windowsでは、coloramaは_sys.stdout_と_sys.stderr_をプロキシオブジェクトに置き換えることで機能します。プロキシオブジェクトは、.write()メソッドをオーバーライドして機能します。

したがって、stdoutafterをインポートする必要があります。これは、initの呼び出しの一部として置き換えられました。

_>>> from colorama import Fore, Style, init
>>> init()
>>> from sys import stdout
>>> stdout.write(Fore.RED + Style.BRIGHT + "Test" + Style.RESET_ALL + "\n")
Test      <--- This is now bright red.
_

お役に立てれば!

0
Joshua

WindowsにはANSIがないため、これは正常です。

tendo.colorer のように試してみてください。これにより、すべてのプラットフォームでカラーリングが有効になります。

注:tendo.colorerはログに色を追加しますが、他の用途に使用する方法がわかると思います。コードの前にインポートするだけで間違いがなければ、問題は解決します。

0
sorin