如何捕获python控制台应用程序的特殊键

时间:2014-08-26 18:30:47

标签: python ascii msvcrt

Python 2.7

我试图在我使用msvcrt模块中的getch()函数编写的应用程序中捕获按键。有些很容易,输入是13,退格是8,。>有些钥匙,比如Home,我无法解决。

来自getch()的docstring:

"如果按下的键是特殊功能键,则返回'000'或'xe0';下一个电话将返回键码。"

我已经尝试过测试返回值为' 000'或者' xe0'但这不会被退回。发生的事情是我得到224并且在下一次调用getch()时我得到另一个代码,所以对于Home它来说71.其他特殊键也是这样的,End是224 79,Insert是224 82,Page Up是224 73等我无法解释这种行为;我试过看看是否将这两个值加在一起然后取下两个有用的力量(即224 + 73 - 256),但它并没有产生任何有用的东西。

有没有人理解这种行为和/或有没有人对如何捕获这些密钥有任何建议(我不想硬编码224 + x模式值,因为我不相信这些是一致的和其他用户一起)?

谢谢。

编辑: 代码,如果有人想试试

import msvcrt

while True:
    key = msvcrt.getch()
    print ord(key)

1 个答案:

答案 0 :(得分:1)

getch()返回的上述值不是'xe0',而是 '\xe0' - 请注意反斜杠表示escape sequence224只是该字节的十进制值:

ord('\xe0') == 224

所以在你的情况下,这应该有效:

while True:
    key = msvcrt.getch()
    if key in ('\000', '\xe0'):
        # special key, handle accordingly
        # ...