Печать ansi в windows cmd работает в IPython, но не где-либо еще. Почему?

Я работаю над созданием кроссплатформенного кода, а это значит, что я борюсь с проблемами Windows. В настоящее время у меня возникают проблемы с отображением цветов в терминале.

В основном я использую пигменты для работы с цветами. Когда я вхожу:

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]:

Обратите внимание, что в этом примере привет распечатывается красным цветом.

Как это работает? Делает ли IPython что-то умное и заменяет последовательности ansi кодами Windows из colorama, когда текст записывается в стандартный вывод? Или IPython что-то делает с терминалом, что позволяет работать ansi?

В любом случае, есть ли способ заставить функцию раскрашивания пигментов хорошо работать в среде Windows?


person Erotemic    schedule 24.12.2017    source источник


Ответы (1)


Кажется, используется метод перехвата stdout. Это делает не IPython, а colorama сам. Наверное, я неправильно понял, что делает этот модуль.

Чтобы цвета ansii отображались правильно в терминале win32 cmd, выполняющемся

import colorama
colorama.init()

заставит ansi работать до конца сеанса.

person Erotemic    schedule 24.12.2017