ANSI Escape序列在Cygwin中失败

时间:2012-04-04 22:42:49

标签: python escaping cygwin ansi-escape tui

我正在尝试使用Python 2.7.2中的ANSI转义序列为CLI程序创建一个“下拉菜单”。我使用ANSI转义序列将'选项'更改为红色并在输入行下方显示它们,然后清除它们。

我能够在运行Python 2.6.5的运行Ubuntu 10.04LTS的系统上运行代码,但是无法让程序在运行Cygwin minTTY 1.0.3的Windows XP机器上运行。 Windows或Cygwin中的sys.stdout.flush()是否存在问题?它是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上正常工作),这种方式违背了提示文本的目的。提前谢谢 - 保罗

1 个答案:

答案 0 :(得分:0)

您无法执行此操作,因为Windows控制台根本不支持ANSI。

回到MSDOS时代,有一个ANSI.SYS驱动程序,您可以加载它以启用它们,但不再存在。

我的印象是,如果要构建TUI界面(文本用户界面),则需要调查https://pypi.python.org/pypi/UniCurses之类的内容的使用

参考文献: