Escape-последовательности ANSI не работают в Cygwin

Я пытаюсь создать «выпадающее меню» для программы CLI, используя escape-последовательности ANSI в Python 2.7.2. Я использую escape-последовательности ANSI, чтобы изменить «параметры» на красный и отобразить их под строкой ввода, а затем очистить их.

Я могу запустить код в системе под управлением Ubuntu 10.04LTS, которая работает под управлением Python 2.6.5, но я не могу запустить программу на компьютере с Windows XP, на котором работает Cygwin minTTY 1.0.3. Есть ли проблема с sys.stdout.flush() в Windows или Cygwin? Это проблема Python 2.6–2.7? Не знаю, с чего начать отладку.

#!C:\Python27\python.exe
#!/usr/bin/python

import sys

table = {1:'foo', 2:'bar', 3:'foo'}
print '\n'
for item in table.keys() :
    sys.stdout.write('\033[1;31m    %s) %s\033[0m\n' % (item,table[item]))
    sys.stdout.flush()
sys.stdout.write('%s' %((item+1)*'\033M'))
sys.stdout.flush()
answer = raw_input("Select foobar: ")
sys.stdout.write('\033[J')
sys.stdout.flush()
print 'You have selected %s' % (table[answer])

Проблема в том, что необработанный вводимый текст не распечатывается до тех пор, пока вы не сделаете свой выбор в minTTY (опять же, код отлично работает в Ubuntu), что противоречит цели текста подсказки. Заранее спасибо - Павел


person paulski    schedule 04.04.2012    source источник


Ответы (1)


Вы не можете этого сделать, потому что консоль Windows вообще не поддерживает ANSI.

Еще во времена MSDOS был драйвер ANSI.SYS, который можно было загрузить, чтобы включить их, но больше нельзя.

У меня сложилось впечатление, что вам нужно будет исследовать использование чего-то вроде https://pypi.python.org/pypi/UniCurses, если вы хотите создать интерфейс TUI (текстовый пользовательский интерфейс)

Использованная литература:

person sorin    schedule 25.11.2015
comment
Это утверждение неверно: в Windows нет ничего, что могло бы этому помешать. Консоль git bash правильно отображает последовательности ANSI ESC. ПРИМЕЧАНИЕ: консоль git bash не имеет отношения к этому вопросу; поэтому я не публиковал это как решение. Я все еще ищу решение этого вопроса. В качестве возможного решения см. superuser.com/questions/413073/ - person Richard Jessop; 05.03.2021