Hook and simulate keyboard events on Windows and Linux
Take full control of your keyboard with this small Python library. Hook global events, register hotkeys, simulate key presses and much more.
- Global event hook on all keyboards (captures keys regardless of focus).
- Listen and send keyboard events.
- Works with Windows and Linux (requires sudo), with experimental OS X support (thanks @glitchassassin!).
- Pure Python, no C modules to be compiled.
- Zero dependencies. Trivial to install and deploy, just copy the files.
- Python 2 and 3.
- Complex hotkey support (e.g. ctrl+shift+m, ctrl+space) with controllable timeout.
- Includes high level API (e.g. record and play, add_abbreviation).
- Maps keys as they actually are in your layout, with full internationalization support (e.g. Ctrl+ç).
- Events automatically captured in separate thread, doesn’t block main program.
- Tested and documented.
- Doesn’t break accented dead keys (I’m looking at you, pyHook).
- Mouse support available via project mouse (pip install mouse).
Install the PyPI package:
pip install keyboard
or clone the repository (no installation required, source files are sufficient):
git clone https://github.com/boppreh/keyboard
or download and extract the zip into your project folder.
Then check the API docs below to see what features are available.
import keyboard keyboard.press_and_release('shift+s, space') keyboard.write('The quick brown fox jumps over the lazy dog.') keyboard.add_hotkey('ctrl+shift+a', print, args=('triggered', 'hotkey')) # Press PAGE UP then PAGE DOWN to type "foobar". keyboard.add_hotkey('page up, page down', lambda: keyboard.write('foobar')) # Blocks until you press esc. keyboard.wait('esc') # Record events until 'esc' is pressed. recorded = keyboard.record(until='esc') # Then replay back at three times the speed. keyboard.play(recorded, speed_factor=3) # Type @@ then press space to replace with abbreviation. keyboard.add_abbreviation('@@', 'firstname.lastname@example.org') # Block forever, like `while True`. keyboard.wait()
- Events generated under Windows don’t report device id (event.device == None). #21
- Media keys on Linux may appear nameless (scan-code only) or not at all. #20
- Key suppression/blocking only available on Windows. #22
- To avoid depending on X, the Linux parts reads raw device files (/dev/input/input*) but this requries root.
- Other applications, such as some games, may register hooks that swallow all key events. In this case keyboard will be unable to report events.
- This program makes no attempt to hide itself, so don’t use it for keyloggers or online gaming bots. Be responsible.
Release history Release notifications
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
|Filename, size & hash SHA256 hash help||File type||Python version||Upload date|
|keyboard-0.13.2-py2.py3-none-any.whl (59.8 kB) Copy SHA256 hash SHA256||Wheel||py2.py3|
|keyboard-0.13.2.win-amd64.exe (648.9 kB) Copy SHA256 hash SHA256||Windows Installer||any|
|keyboard-0.13.2.zip (67.8 kB) Copy SHA256 hash SHA256||Source||None|