python:在输入

时间:2016-04-14 00:22:19

标签: python user-input codec

我的Python程序如何将用户的键盘输入转换为大写,就像用户启用了CAPS LOCK一样?

我想模仿在计算机上运行的程序,该程序没有任何小写字母(即字符集比ASCII更有限)。

用户在键盘上以交互方式输入的文本输入应该被实时强制为大写,就像用户输入的内容一样。

命令行界面可以使用Python的标准cmd库或其他东西。转换可以通过自定义输入流或其他方式完成。

我对完全重新实现逐字符输入系统不感兴趣;例如,如果可用,我想继续使用readline。我只想翻译结果流,因为它在视觉上和进入程序时一样。

有一个Unix终端属性OLCUC,听起来很有希望;但它是marked LEGACY in the Single Unix Specification,它的实现是不可靠的(导致一些正常控制序列或Unicode文本的垃圾)。所以这不是解决方案。

特别重要的是界面应该与实际输入大写文本的人明显无法区分;显示应该只显示用户的输入作为程序将处理的大写文本。

1 个答案:

答案 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