keyboard
Take full control of your keyboard with this small Python library. Hook global events, register hotkeys, simulate key presses and much more.
Features
- 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
).
Usage
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.
Example
Use as library:
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'))
keyboard.add_hotkey('page up, page down', lambda: keyboard.write('foobar'))
keyboard.wait('esc')
recorded = keyboard.record(until='esc')
keyboard.play(recorded, speed_factor=3)
keyboard.add_abbreviation('@@', 'my.long.email@example.com')
keyboard.wait()
Use as standalone module:
python -m keyboard > events.txt
cat events.txt
python -m keyboard < events.txt
Known limitations:
- 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 requires 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.
- SSH connections forward only the text typed, not keyboard events. Therefore if you connect to a server or Raspberry PI that is running
keyboard
via SSH, the server will not detect your key events.
Common patterns and mistakes
Preventing the program from closing
import keyboard
keyboard.add_hotkey('space', lambda: print('space was pressed!'))
keyboard.wait()
import time
while True:
time.sleep(1000000)
Waiting for a key press one time
import keyboard
keyboard.wait('space')
print('space was pressed, continuing...')
Repeatedly waiting for a key press
import keyboard
while True:
keyboard.wait('space')
print('space was pressed! Waiting on it again...')
keyboard.add_hotkey('space', lambda: print('space was pressed!'))
keyboard.wait()
Invoking code when an event happens
import keyboard
keyboard.add_hotkey('space', lambda: print('space was pressed'))
def on_space():
print('space was pressed')
keyboard.add_hotkey('space', on_space)
while True:
event = keyboard.read_event()
if event.event_type == keyboard.KEY_DOWN and event.name == 'space':
print('space was pressed')
'Press any key to continue'
input('Press enter to continue...')