You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 12:55:06