在Python中检测键盘按键输入
我想知道如何在一个控制台的Python应用程序中检测键盘输入。具体来说,我希望在进行很多其他输入输出操作(比如网络连接、串口访问等)的时候,也能做到这一点:
while True:
# doing amazing pythonic embedded stuff
# ...
# periodically do a non-blocking check to see if
# we are being told to do something else
x = keyboard.read(1000, timeout = 0)
if len(x):
# ok, some key got pressed
# do something
在Windows上,正确的Python方式是什么?另外,如果能在Linux上也能用就更好了,虽然这不是必须的。
12 个回答
18
这些答案对我来说都不太管用。这个包,pynput,正好满足我的需求。
https://pypi.python.org/pypi/pynput
from pynput.keyboard import Key, Listener
def on_press(key):
print('{0} pressed'.format(
key))
def on_release(key):
print('{0} release'.format(
key))
if key == Key.esc:
# Stop listener
return False
# Collect events until released
with Listener(
on_press=on_press,
on_release=on_release) as listener:
listener.join()
23
这是一个使用curses模块的解决方案。它的功能是根据每次按下的键,打印出一个对应的数字值:
import curses
def main(stdscr):
# do not wait for input when calling getch
stdscr.nodelay(1)
while True:
# get keyboard input, returns -1 if none available
c = stdscr.getch()
if c != -1:
# print numeric value
stdscr.addstr(str(c) + ' ')
stdscr.refresh()
# return curser to start position
stdscr.move(0, 0)
if __name__ == '__main__':
curses.wrapper(main)