我正在努力使我的一些代码跨平台,这意味着我正在与Windows问题作斗争。我目前在终端上显示颜色时遇到问题。
我主要使用pygments来处理颜色。当我进入:
python -c "import pygments.console; print(pygments.console.colorize('red', 'hi'))"
在win32控制台(或git bash),我得到这个:
[31;01mhi[39;49;00m
但是,如果我打开IPython并输入相同的命令,它可以工作:
$ ipython
Python 3.6.3 |Anaconda, Inc.| (default, Nov 8 2017, 15:10:56) [MSC v.1900 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 6.2.1 -- An enhanced Interactive Python. Type '?' for help.
In [1]: import pygments.console
In [2]: print(pygments.console.colorize('red', 'hi'))
hi
In [3]:
请注意,hi在此示例中打印为红色。
这是怎么回事?当文本写入stdout时,IPython是否做了一些聪明的事情并用colorama中的windows代码替换ansi序列?或者是IPython对终端做了什么让ansi工作?
无论哪种方式,有没有办法让pygments colorize函数在windows环境中运行良好?
似乎使用了stdout拦截方法。它不是IPython,它是colorama
本身。我想我误解了那个模块在做什么。
使ansii颜色在win32 cmd终端执行时正确显示
import colorama
colorama.init()
会导致ansi在剩下的会话中工作。