我的Python程序如何将用户的键盘输入转换为大写,就好像用户启用了CAPS LOCK一样?
我想模拟一个在没有任何小写字母的计算机上运行的程序(即一个比ASCII更有限的字符集)。
用户在键盘上交互式键入的文本输入应该实时强制为大写,就好像这是用户键入的一样。
命令行接口可以使用Python的标准cmd
库,或者其他什么。转换可以通过自定义输入流或其他方式完成。
我对完全重新实现逐字符输入系统不感兴趣;例如,如果readline
可用,我想继续使用它。我只想翻译结果流,因为它在视觉上出现,并进入程序。
有一个Unix终端属性OLCUC
,听起来很有前景;但在单一Unix规范中,它被标记为LEGACY,并且它的实现是不可靠的(会导致一些正常控制序列或Unicode文本的垃圾)。因此,这不是一个解决方案。
特别重要的是,界面应该看起来与实际输入大写文本的人没有明显区别;显示器应该只将用户的输入显示为程序将处理的大写文本。
使用getch:http://code.activestate.com/recipes/134892/
在__call__
函数的stdin.read
后面附加以下内容:
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1).upper()
sys.stdout.write(ch)
...
您可以只执行一个条件while(例如,直到用户按下回车键)来逐个获取字符,并将其作为大写字母进行回显:
getch = _Getch()
text = ''
while True:
char = getch()
if ord(char) == 13: # ascii carriage return
break
else:
text += char
print text