我一直在寻找以阻塞和非阻塞两种方式检测按键的可能性,并且在其他一些类似的PyPI库中,我发现getkey package(最初)似乎可以满足我的需求。
尽管从命令行启动程序时(在Windows 10 + Python 2.7上),该库确实运行良好,但是始终从IDLE getkey()
启动同一程序时(即使没有执行任何操作,该库也是如此)。按下)将返回此字符:˙
。
这是我用来测试库的代码:
from getkey import getkey, keys
from time import sleep
sleep(2)
print "Start"
key = getkey(blocking=True)
while key != "m":
if key == keys.UP:
print "UP"
else:
print key
sleep(2)
print "Next..."
key = getkey(blocking=True)
print "End"
注意:
由于我将在Rasbperry Pi(Linux)上使用代码,因此我一直在寻找一种方法来检测从命令行启动的程序中的按键输入,但我希望能够首先在Windows上测试算法-因此,我一直在寻找跨平台解决方案。另外,我想避免像key = getkey(blocking=False)
那样使用非阻塞调用时缓冲按键的缓冲,但是稍后sleep()
期间所有按下的按键也会被一一检测出来-这不是什么我想要。换句话说,我实际上是在寻找一些类似的库,该库仅在读取键盘的命令执行时按下键时才检测到。但这是另一个主题,在这里我想知道为什么从IDLE启动时与从命令行启动时相同的代码会产生不同的结果。
编辑:
从IDLE内部启动代码时的输出为:
Start
˙
Next...
˙
Next...
˙
Next...
˙
Next...
˙
Next...
˙
以此类推(即使没有任何键盘输入)。
从命令行启动程序时的输出符合预期,例如:
Start
a
Next...
z
Next...
UP
Next...
End
如果按下的键为:“ a”,“ z”,“向上箭头”,“ m”,则为输出。