web-dev-qa-db-ja.com

Python:ANSIエスケープコードをWindowsでも機能させるにはどうすればよいですか?

Linuxでpython)でこれを実行すると、次のように機能します。

start = "\033[1;31m"
end = "\033[0;0m"
print "File is: " + start + "<placeholder>" + end

しかし、Windowsで実行すると機能しません。どうすれば、ANSIエスケープコードをWindowsでも機能させることができますか?

13

WindowsでstdoutのANSIカラーを有効にするPythonモジュール? をチェックして、それが役立つかどうかを確認できます。

colorama モジュールはクロスプラットフォームのようです。

Coloramaをインストールします:

pip install colorama

次に:

import colorama
colorama.init()
start = "\033[1;31m"
end = "\033[0;0m"
print "File is: " + start + "<placeholder>" + end
18
pr0gg3d

Win 10(cmdでネイティブANSIサポートを使用)を使用している場合は、 resolvedin Python 3.7 としてマークされたバグがあります(ただし、表示されません)実際に修正されました)。

回避策の1つは、印刷する前にsubprocess.call('', Shell=True)を追加することです。

4
Dan M.

あなたは見ることができます https://github.com/kennethreitz/clint

READMEから:

>>> from clint.textui import colored, puts

>>> puts(colored.red('red text'))
red text

# It's red in Windows, OSX, and Linux alike.
4
mfussenegger

ここにセミコロンを追加してみてください\033[;、セミコロンがないと望ましくない効果があります。

start = "\033[;1;31m"
end = "\033[;0;0m"
1
Oliver Burt

インターネット上の何千もの細かい答えによると、ANSIエスケープシーケンスの送信は機能するはずですが、1つのあいまいな詳細に遭遇するのに2日半かかりました。秘訣は、特定のレジストリキーを設定する必要があるということです。私は(今日だけ)Windows 10 Enterprise、バージョン1709、ビルド16299を使用しています。

HKEY_CURRENT_USERのコンソールの下のTrimLeadingZerosとWindowAlphaの間にVirtualTerminalLevelがあるはずです。存在しない場合は、先に進んで作成してください。 REG_DWORDです。その値を1に設定します。新しいターミナルを開き、Pythonを実行して、少し楽しんでください。

print("\033[48;2;255;140;60m ORANGE BACKGROUND \033[48;2;0;0;0m")

https://github.com/ytdl-org/youtube-dl/issues/15758 を参照して、これについて私よりも多くのことを知っている人々の記事を読んでください。

whyを思い出せたら、Pythonプログラムの出力...

1
DarenW

これが私が長い間探していた解決策です。 標準ライブラリctypesモジュールを使用するだけです。デフォルトでは、WindowsではPython 3.x、onlyでインストールされます。したがって、OSがWindowsであるかどうかを確認してください。それを使用するには(たとえば、platform.systemを使用)。

from platform import system
if "win" in system().lower(): #works for Win7, 8, 10 ...
    from ctypes import windll
    k=windll.kernel32
    k.SetConsoleMode(k.GetStdHandle(-11),7)

それが終わったら、Unixオペレーティングシステムを使用しているかのように、ASCII特殊文字(赤い色の場合は\x1b[31mなど)を使用できます。

print("\x1b[31mERROR\x1b[0m")

モジュール(coloramaやtermcolorなど)をインストールする必要がないため、このソリューションが気に入っています。

1
Firefnix

簡単なモジュールを作成しました。次の場所で入手できます。 http://pypi.python.org/pypi/colorconsole

Windows、Mac OS X、Linuxで動作します。 LinuxおよびMacではANSIを使用しますが、Windowsではコンソール関数をネイティブに呼び出します。色、カーソル位置、キーボード入力があります。これはcursesの代わりにはなりませんが、単純なスクリプトやASCIIゲームで使用する必要がある場合に非常に役立ちます。

ドキュメントはここにあります: http://code.google.com/p/colorconsole/wiki/PageName

PS:これは Pythonを使用して色付きのターミナルで印刷しますか? の場合と同じ答えですが、返信にリンクする方法がわかりませんでした。

1
nmenezes