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