文章目录
- keyboard 是一个跨平台的键盘控制与事件监听库,支持: 捕获按键事件(按下/释放) 监听全局快捷键 模拟键盘输入 录制与回放键盘操作 该库由 Boppreh 开发(同样是 mouse、pynput 等自动化库的作者之一)。
- 在命令行中安装: pip install keyboard Windows 用户 可能需要以管理员身份运行命令行; Linux 用户 则需运行: sudo pip install keyboard 因为监听键盘事件通常需要系统级权限。
- import keyboard keyboard.write(“Hello, Keyboard!”) keyboard.press_and_release(‘enter’) 执行后,你会看到程序在光标所在处自动输入“Hello, Keyboard!”并回车。
- import keyboard if keyboard.is_pressed(‘a’): print(“A 键被按下!”) 该函数可实时检测指定按键是否被按住。 支持单键或组合键检测,如: keyboard.is_pressed(‘ctrl+shift+s’)
-
- import keyboard def on_space(e): print(f”检测到空格键事件:{e.name} – {e.event_type}”) keyboard.on_press_key(‘space’, on_space) keyboard.wait(‘esc’) # 按 Esc 退出 输出结果示例: 检测到空格键事件:space – down
- import keyboard keyboard.hook(lambda e: print(f”{e.name} -> {e.event_type}”)) keyboard.wait(‘esc’) 每当任意按键被按下或释放时,都会触发回调。
- keyboard 可定义系统级热键,即在任意程序中触发回调。 import keyboard def save_action(): print(“触发保存操作 (Ctrl+S)”) keyboard.add_hotkey(‘ctrl+s’, save_action) keyboard.wait(‘esc’) 即使焦点在浏览器或编辑器中,也能被捕获。
- keyboard.wait() 是非常常用的阻塞函数: keyboard.wait(‘enter’) print(“检测到回车键,继续执行…”)
- keyboard 使用系统钩子(hook)机制拦截键盘事件: Windows:使用 Win32 API(通过 SetWindowsHookEx) Linux:直接读取 /dev/input 设备文件 macOS:使用 Quartz 事件 API(部分功能需额外权限) 这也是为什么需要 管理员权限 的原因。
- 每当有键盘事件产生时,库会将事件封装为 KeyboardEvent 对象,并分发给所有注册的监听器。 KeyboardEvent(name=’a’, event_type=’down’, scan_code=30, time=…) 所有事件通过 hook() 注册的回调函数处理,类似发布-订阅模式。
- 自动打开浏览器、搜索指定内容。 import keyboard import webbrowser def open_google(): webbrowser.open(“https://www.google.com/search?q=python keyboard库”) keyboard.add_hotkey(‘ctrl+shift+g’, open_google) print(“按 Ctrl+Shift+G 自动搜索关键词”) keyboard.wait(‘esc’)
- import keyboard import time text = “Python makes automation easy!n” time.sleep(3) keyboard.write(text, delay=0.1) 运行后,在任意输入框中光标处将自动“打字”输出内容。
- 按下 F1 连续点击数字键 1~5: import keyboard import time def auto_attack(): for i in range(1, 6): keyboard.press_and_release(str(i)) time.sleep(0.2) keyboard.add_hotkey(‘f1’, auto_attack) keyboard.wait(‘esc’)
- import keyboard log = open(“key_log.txt”, “a”, encoding=”utf-8″) def write_log(e): log.write(f”{e.name} {e.event_type}n”) log.flush() keyboard.hook(write_log) keyboard.wait(‘esc’) log.close() 可用于开发调试或快捷键行为分析。
- import keyboard print(“录制中… 按 ESC 停止”) events = keyboard.record(until=’esc’) print(“播放中…”) keyboard.play(events) 这相当于一个“键盘动作宏录制器”。
目录
- 一、前言:为什么需要 keyboard?
- 二、keyboard 库简介
- 1. 库的定位
- 2. 安装方式
- 3. 快速上手
- 三、核心功能详解
- 1. 检测按键状态
- 2. 监听按键事件
- (1)监听单个键
- (2)监听所有按键
- 3. 注册全局快捷键
- 4. 模拟键盘输入
- (1)模拟单键输入
- (2)组合按键
- (3)输入字符串
- 5. 录制与回放操作
- (1)录制键盘事件
- (2)回放录制的操作
- 6. 阻塞与等待控制
- 四、事件对象详解
- 五、底层原理剖析
- 1. 全局监听机制
- 2. 事件分发机制
- 六、常见使用场景实战
- 案例 1:快捷键触发自动化任务
- 案例 2:自动化输入脚本(模拟打字)
- 案例 3:游戏宏脚本
- 案例 4:键盘事件日志记录器
- 案例 5:录制 & 回放自动化操作
- 七、与其他键盘库比较
- 八、常见问题与解决方案
- 1. 无法监听按键(Windows)
- 2. Linux 无法检测事件
- 3. macOS 权限问题
- 九、高级应用:键盘宏与自动打卡工具
- 十、源码结构浅析
- 十一、与 mouse 库联动使用
- 十二、项目实战:自动化测试脚本执行器
- 十三、安全性与限制
- 十四、性能优化建议
- 十五、总结与展望
- 优点
- 缺点
- 应用方向
- 十六、一句话总结
在自动化办公、游戏辅助、测试脚本、系统控制等场景中,我们经常需要让程序“感知”或“模拟”键盘行为:
- 监听用户是否按下某个键;
- 自动触发快捷键;
- 模拟键盘输入(例如自动填写表单);
- 记录操作日志或编写宏脚本。
而在 Python 生态中,最强大、最易用的键盘操作库之一就是 —— keyboard。
keyboard 让我们能够在任意系统上轻松地监听键盘事件、模拟键盘输入,甚至实现复杂的组合键操作。
本文将带你全面掌握 keyboard 库,从基础用法到底层原理,再到高级自动化项目实战。
keyboard 是一个跨平台的键盘控制与事件监听库,支持:
- 捕获按键事件(按下/释放)
- 监听全局快捷键
- 模拟键盘输入
- 录制与回放键盘操作
该库由 Boppreh 开发(同样是 mouse、pynput 等自动化库的作者之一)。
在命令行中安装:
pip install keyboard
Windows 用户 可能需要以管理员身份运行命令行;
Linux 用户 则需运行:
sudo pip install keyboard
因为监听键盘事件通常需要系统级权限。
import keyboard
keyboard.write("Hello, Keyboard!")
keyboard.press_and_release('enter')
执行后,你会看到程序在光标所在处自动输入“Hello, Keyboard!”并回车。
下面我们系统地拆解 keyboard 的核心功能。
import keyboard
if keyboard.is_pressed('a'):
print("A 键被按下!")
该函数可实时检测指定按键是否被按住。
支持单键或组合键检测,如:
keyboard.is_pressed('ctrl+shift+s')
import keyboard
def on_space(e):
print(f"检测到空格键事件:{e.name} - {e.event_type}")
keyboard.on_press_key('space', on_space)
keyboard.wait('esc') # 按 Esc 退出
输出结果示例:
检测到空格键事件:space - down
import keyboard
keyboard.hook(lambda e: print(f"{e.name} -> {e.event_type}"))
keyboard.wait('esc')
每当任意按键被按下或释放时,都会触发回调。
每当任意按键被按下或释放时,都会触发回调。
keyboard 可定义系统级热键,即在任意程序中触发回调。
import keyboard
def save_action():
print("触发保存操作 (Ctrl+S)")
keyboard.add_hotkey('ctrl+s', save_action)
keyboard.wait('esc')
即使焦点在浏览器或编辑器中,也能被捕获。
keyboard.press('a') # 按下 A
keyboard.release('a') # 释放 A
keyboard.press_and_release('ctrl+alt+delete')
keyboard.write("Python 自动化最强!", delay=0.05)
delay 控制每个字符输入间的延迟,可模拟真人输入效果。
import keyboard
print("开始录制,按 ESC 停止...")
events = keyboard.record(until='esc')
print("录制完成!")
keyboard.play(events, speed_factor=1.0)
keyboard.wait() 是非常常用的阻塞函数:
keyboard.wait('enter')
print("检测到回车键,继续执行...")
keyboard 中的每个事件对象都有丰富的属性,便于精确判断。
def log_event(e):
print(f"键名: {e.name}, 类型: {e.event_type}, 扫描码: {e.scan_code}")
keyboard.hook(log_event)
keyboard.wait('esc')
事件对象属性:
| 属性 | 说明 |
|---|---|
name |
键名(如 “a”, “space”, “ctrl”) |
scan_code |
键盘扫描码 |
event_type |
事件类型(“down” 或 “up”) |
time |
时间戳(秒) |
keyboard 使用系统钩子(hook)机制拦截键盘事件:
- Windows:使用 Win32 API(通过
SetWindowsHookEx) - Linux:直接读取
/dev/input设备文件 - macOS:使用 Quartz 事件 API(部分功能需额外权限)
这也是为什么需要 管理员权限 的原因。
每当有键盘事件产生时,库会将事件封装为 KeyboardEvent 对象,并分发给所有注册的监听器。
KeyboardEvent(name='a', event_type='down', scan_code=30, time=...)
所有事件通过 hook() 注册的回调函数处理,类似发布-订阅模式。
自动打开浏览器、搜索指定内容。
import keyboard
import webbrowser
def open_google():
webbrowser.open("https://www.google.com/search?q=python keyboard库")
keyboard.add_hotkey('ctrl+shift+g', open_google)
print("按 Ctrl+Shift+G 自动搜索关键词")
keyboard.wait('esc')
import keyboard
import time
text = "Python makes automation easy!n"
time.sleep(3)
keyboard.write(text, delay=0.1)
运行后,在任意输入框中光标处将自动“打字”输出内容。
按下 F1 连续点击数字键 1~5:
import keyboard
import time
def auto_attack():
for i in range(1, 6):
keyboard.press_and_release(str(i))
time.sleep(0.2)
keyboard.add_hotkey('f1', auto_attack)
keyboard.wait('esc')
import keyboard
log = open("key_log.txt", "a", encoding="utf-8")
def write_log(e):
log.write(f"{e.name} {e.event_type}n")
log.flush()
keyboard.hook(write_log)
keyboard.wait('esc')
log.close()
可用于开发调试或快捷键行为分析。
可用于开发调试或快捷键行为分析。
import keyboard
print("录制中... 按 ESC 停止")
events = keyboard.record(until='esc')
print("播放中...")
keyboard.play(events)
这相当于一个“键盘动作宏录制器”。
| 库名 | 功能范围 | 优点 | 缺点 |
|---|---|---|---|
| keyboard | 监听 + 模拟 + 宏录制 | 全功能、易用 | 权限需求高 |
| pynput.keyboard | 监听 + 控制 | 面向对象设计 | 不支持录制回放 |
| pyautogui | GUI 自动化 | 图像识别结合键盘鼠标 | 无法全局监听 |
| win32api | Windows 低级接口 | 性能极高 | 跨平台差 |
结论:
如果目标是 跨平台自动化控制 + 全局监听 + 宏操作,keyboard 是最优解。
原因:脚本权限不足。
解决:以管理员身份运行 Python。
原因:无权限访问 /dev/input/*。
解决:运行:
sudo python your_script.py
或赋权:
sudo chmod a+r /dev/input/*
需在「系统偏好设置 → 安全与隐私 → 辅助功能」中添加 Python 权限。
下面构建一个简单但实用的“键盘自动打卡工具”。
import keyboard
import time
import datetime
def auto_checkin():
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
keyboard.write(f"已打卡 {now}")
keyboard.press_and_release('enter')
keyboard.add_hotkey('ctrl+shift+d', auto_checkin)
print("已启动打卡系统,按 Ctrl+Shift+D 执行,Esc 退出。")
keyboard.wait('esc')
运行后,按下 Ctrl+Shift+D 将自动输入带时间戳的“打卡记录”。
keyboard 的源码结构清晰,约 2000 行左右。
keyboard/ ├── __init__.py ├── _generic.py ├── _keyboard_event.py ├── _nixcommon.py ├── _winkeyboard.py ├── _darwinkeyboard.py └── _keyboard_tests.py
核心模块:
| 模块 | 作用 |
|---|---|
_keyboard_event.py |
定义事件对象 |
_winkeyboard.py |
Windows 平台钩子实现 |
_nixcommon.py |
Linux 平台接口 |
_darwinkeyboard.py |
macOS 接口 |
_generic.py |
通用 API 封装(press、write等) |
keyboard 可以与同作者的 mouse 库配合,实现全自动化控制:
import keyboard
import mouse
keyboard.add_hotkey('ctrl+m', lambda: mouse.click('left'))
keyboard.wait('esc')
当按下 Ctrl+M 时自动点击鼠标。
场景:测试 Web 界面时,自动输入账号、密码并提交。
import keyboard
import time
time.sleep(3) # 给用户3秒打开浏览器
keyboard.write("test_user")
keyboard.press_and_release('tab')
keyboard.write("123456")
keyboard.press_and_release('enter')
这个简单脚本可以快速实现登录测试自动化。
虽然 keyboard 功能强大,但也有一些需要注意的安全与合规问题:
- 不应用于键盘记录(keylogger)或侵犯隐私的行为;
- 某些系统会限制后台钩子,需管理员权限;
- 在企业级场景中,应合理使用,避免干扰用户输入。
- 对于高频监听,使用
keyboard.read_event(suppress=True) 避免过度打印;
- 使用独立线程处理监听逻辑;
- 减少回调中耗时操作;
- 使用
keyboard.unhook_all() 清理监听器,防止资源泄漏。
keyboard.read_event(suppress=True) 避免过度打印;keyboard.unhook_all() 清理监听器,防止资源泄漏。
keyboard 是 Python 世界中功能最全、体验最佳的键盘操作库。
它几乎涵盖了从“监听”到“模拟输入”的全部需求。
- API 简洁明了;
- 支持录制与回放;
- 支持全局快捷键;
- 可跨平台使用。
- 权限要求较高;
- 不支持虚拟机沙盒;
- macOS 支持有限。
- 自动化测试
- 游戏脚本与宏
- 系统快捷操作
- 无人值守输入系统
- 键鼠动作录制器
Keyboard 库让 Python 拥有了操作键盘的“超能力”。
从监听到模拟、从快捷键到宏操作,它让自动化脚本变得轻松、可控、充满创造力。
Keyboard 库让 Python 拥有了操作键盘的“超能力”。
从监听到模拟、从快捷键到宏操作,它让自动化脚本变得轻松、可控、充满创造力。
以上就是Python使用keyboard库实现键盘监听与自动化控制的实战指南的详细内容,更多关于Python keyboard键盘监听与自动化控制的资料请关注风君子博客其它相关文章!
您可能感兴趣的文章:
- Python中keyboard的使用之监控键盘的按键输入
- Python通过keyboard库实现模拟和监听键盘
- Python利用keyboard模块实现键盘记录操作
- python利用 keyboard 库记录键盘事件
- python 偷懒技巧——使用 keyboard 录制键盘事件