我正在努力使我的一些代码跨平台,这意味着我正在与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环境中运行良好?
答案 0 :(得分:0)
似乎正在使用stdout拦截方法。它不是IPython,它是colorama
本身。我想我误解了那个模块在做什么。
在执行
的win32 cmd终端中正确显示ansii颜色import colorama
colorama.init()
将导致ansi在剩余的会话中工作。