Python如何无需按下回车键即可即时读取键盘输入控制机器人?
无回车即时读取键盘输入实现方案
有两种常用实现方案可以满足按键按下后立即触发功能,无需等待回车确认:
方案1:使用跨平台第三方库keyboard(推荐,适配全平台)
无需自己处理系统差异,调用逻辑最简单:
- 先安装依赖:
pip install keyboard - 功能实现代码:
import keyboard # 此处替换为你自己的机器人控制逻辑 def goRight(): print("向右移动") def goLeft(): print("向左移动") while True: if keyboard.is_pressed('l'): goLeft() # 等待按键松开,避免单次按压触发多次逻辑,suppress参数避免按键输入落到系统缓冲区 keyboard.wait('l', suppress=True) elif keyboard.is_pressed('r'): goRight() keyboard.wait('r', suppress=True) elif keyboard.is_pressed('e'): print("程序退出") break
方案2:使用标准库实现(无需安装第三方依赖)
需要根据运行系统选择对应代码:
Windows平台
使用系统自带的msvcrt模块实现:
import msvcrt def goRight(): print("向右移动") def goLeft(): print("向左移动") direction = "" while direction != b"e": # 检测是否有按键输入 if msvcrt.kbhit(): direction = msvcrt.getch() if direction == b"r": goRight() elif direction == b"l": goLeft()
Linux/macOS平台
使用termios和tty标准库实现:
import sys import tty import termios def goRight(): print("向右移动") def goLeft(): print("向左移动") # 实现单字符读取函数 def getch(): fd = sys.stdin.fileno() old_settings = termios.tcgetattr(fd) try: tty.setraw(sys.stdin.fileno()) ch = sys.stdin.read(1) finally: # 恢复终端原有设置 termios.tcsetattr(fd, termios.TCSADRAIN, old_settings) return ch direction = "" while direction != "e": direction = getch() if direction == "r": goRight() elif direction == "l": goLeft()
注意事项
- Linux/macOS环境下运行键盘读取相关代码时,可能需要使用root权限(sudo前缀启动程序)才能正常获取键盘事件
- 标准库实现需要按运行系统区分代码,通用性不如第三方库方案
内容的提问来源于stack exchange,提问作者laieman
相关产品推荐
相关产品推荐

