Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为python控制台应用程序捕获特殊密钥_Python_Ascii_Msvcrt - Fatal编程技术网

如何为python控制台应用程序捕获特殊密钥

如何为python控制台应用程序捕获特殊密钥,python,ascii,msvcrt,Python,Ascii,Msvcrt,Python 2.7 我正在尝试捕获我正在使用msvcrt模块中的getch()函数编写的应用程序中的按键。有些很简单,回车键是13,退格键是8,.>键是46等等。有些键,比如Home键,我算不出来 从getch()的docstring: 如果按下的键是特殊功能键,则返回“000”或“xe0”;下一次调用将返回键代码 我已尝试测试返回值“000”或“xe0”,但没有返回。结果是返回224,在下一次调用getch()时,我得到另一个代码,因此对于Home来说是71。其他特殊键也是这样,End是22

Python 2.7

我正在尝试捕获我正在使用msvcrt模块中的getch()函数编写的应用程序中的按键。有些很简单,回车键是13,退格键是8,.>键是46等等。有些键,比如Home键,我算不出来

从getch()的docstring:

如果按下的键是特殊功能键,则返回“000”或“xe0”;下一次调用将返回键代码

我已尝试测试返回值“000”或“xe0”,但没有返回。结果是返回224,在下一次调用getch()时,我得到另一个代码,因此对于Home来说是71。其他特殊键也是这样,End是22479,Insert是22482,Page Up是22473等等。我无法解释这种行为;我试着将这两个值相加,然后取二的幂(即224+73-256),但这并没有产生任何有用的结果

是否有人了解这种行为和/或是否有人对如何捕获这些密钥有任何建议(我不想硬编码224+x模式值,因为我不确定这些值是否与其他用户一致)

多谢各位

编辑: 如果有人想试试的话,请输入代码

import msvcrt

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

getch()
返回的所述值不是
'xe0'
,而是
'\xe0'
-请注意反斜杠指示一个值
224
只是该字节的十进制值:

ord('\xe0') == 224
因此,在您的情况下,这应该是可行的:

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

它不是
'xe0'
,而是
'\xe0'
(请注意,反斜杠表示一个字符)
224
只是该字节的十进制值:
ord('\xe0')==224
非常好,谢谢。我不确定我是否只是在做傻事,或者是否应该在文件中明确说明这一点?好吧,这是在文件中,包括反斜杠-不确定你在说什么。是的,你是对的。我的侧面没有显示反斜杠。