如何在Python中读取多组键盘按键输入(基于stdin?)
捕获终端下的任意键盘组合键(基于keyboard库)
你可以通过维护一个活跃按键集合来实时追踪当前按下的所有按键,从而捕获任意组合,无需预先定义。keyboard库本身支持监听按键的按下和释放事件,结合集合就能实现需求:
import keyboard import time # 用于存储当前处于按下状态的按键 active_keys = set() def update_active_keys(key): if key.event_type == "down": # 避免重复添加同一按键(比如长按) if key.name not in active_keys: active_keys.add(key.name) # 打印当前所有按下的按键组合,排序保证格式统一 print("当前组合:", "+".join(sorted(active_keys))) elif key.event_type == "up": if key.name in active_keys: active_keys.remove(key.name) # 监听所有按键的按下和释放事件 keyboard.hook(update_active_keys) print("开始捕获键盘组合,按Esc退出...") try: while True: # 检测退出条件 if keyboard.is_pressed('esc'): break time.sleep(0.01) finally: # 清理钩子,避免残留 keyboard.unhook_all() print("\n已退出捕获")
关键说明
- 集合
active_keys会实时记录当前按下的所有按键,按下时加入集合,释放时从集合移除。 - 每次按键按下时,用
+连接集合中的按键并排序,保证组合键输出格式统一(比如ctrl+shift+a而非随机顺序)。 - 必须以root权限运行(Linux/macOS下执行
sudo python3 your_script.py,Windows下以管理员身份打开终端运行脚本),因为系统级键盘事件捕获需要权限。 - 代码加入了Esc键退出逻辑,避免无限循环无法终止。
原代码仅捕获单个按键的原因
keyboard.on_press()的回调函数每次只会接收单个按键的按下事件,所以key参数始终是单个按键对象,而非列表。通过同时监听down和up两种事件并维护活跃按键集合,就能实现任意组合的捕获。
内容的提问来源于stack exchange,提问作者Kronos
相关产品推荐
相关产品推荐

