Python中keyboard.read_key()问题:按键自动填充至input输入框
问题原因与解决方法
问题原因
keyboard.read_key()仅负责捕获按键的标识,但该按键的输入会被留存到系统的输入缓冲区中。当后续执行input()函数时,缓冲区里的字符会被自动读取并填充到输入提示符后,这就是你看到Type something: 1的原因。
解决方法
方法一:阻止按键事件传递到系统输入队列
使用keyboard.read_event()捕获按键,并阻止事件传播,避免按键进入输入缓冲区:
import keyboard # 循环等待有效按键 while True: event = keyboard.read_event() # 仅处理指定按键的按下事件 if event.event_type == keyboard.KEY_DOWN and event.name in ['1', '2']: key = event.name # 阻止按键输入进入系统缓冲区 keyboard.block_key(key) break # 根据按键执行对应逻辑 if key == '1': print('something for 1') elif key == '2': print('something for 2') else: print('something else') # 解除按键阻塞,恢复正常输入 keyboard.unblock_key(key) user_input = input('Type something: ')
方法二:清空输入缓冲区(Windows专属)
利用msvcrt模块清空系统输入缓冲区,适用于Windows环境:
import keyboard import msvcrt key = keyboard.read_key() if key == '1': print('something') elif key == '2': print('something') else: print('something') # 清空缓冲区中残留的按键输入 while msvcrt.kbhit(): msvcrt.getch() user_input = input('Type something: ')
方法三:仅检测按键按下状态
如果只需判断按键是否按下,无需捕获按键字符,可使用keyboard.wait():
import keyboard # 等待1或2按键被按下 keyboard.wait('1') if keyboard.is_pressed('1') else keyboard.wait('2') # 根据按下的按键执行逻辑 if keyboard.is_pressed('1'): print('something for 1') elif keyboard.is_pressed('2'): print('something for 2') else: print('something else') user_input = input('Type something: ')
内容的提问来源于stack exchange,提问作者Afshin Davoudy
相关产品推荐
相关产品推荐

