将ansi打印到windows cmd可以在IPython中运行,但不能在其他任何地方运行。为什么?

问题描述 投票:0回答:1

我正在努力使我的一些代码跨平台,这意味着我正在与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环境中运行良好?

cmd ipython ansi pygments
1个回答
0
投票

似乎使用了stdout拦截方法。它不是IPython,它是colorama本身。我想我误解了那个模块在做什么。

使ansii颜色在win32 cmd终端执行时正确显示

import colorama
colorama.init()

会导致ansi在剩下的会话中工作。

© www.soinside.com 2019 - 2024. All rights reserved.