Skip to main content

Read single characters and key-strokes

Project description

See it at:

VERSION

DOWNLOADS

TESTS

COVERAGE

Latest PyPI version

Number of PyPI downloads

Travis results

Coveralls results_

Library to easily read single chars and key strokes.

Quick Start

from getkey import getkey, keys
key = getkey()
if key == keys.UP:
  ...  # Handle the UP key
elif key == keys.DOWN:
  ...  # Handle the DOWN key
elif key == 'a':
  ...  # Handle the `a` key
elif key == 'Y':
  ...  # Handle `shift-y`
else:
  # Handle other text characters
  buffer += key
  print(buffer)

History

This library seems to have started as a gist by Danny Yoo & made the rounds in various versions until Miguel Ángel García turned it into a portable package for their python-inquirer project. Then K.C.Saff forked it & smashed it into this new form for their own command line input library.

Philosophy

Keys will be returned as strings representing the received key codes, however as some keys may have multiple possible codes on a platform, the key code will be canonicalized so you can test key == keys.UP instead of key in keys.UP. This means non-control keys will be returned just as the text they represent, and you can just as easily test key == 'a' to see if the user pressed a.

In addition, by default we will throw KeyboardInterrupt for Ctrl-C which would otherwise be suppressed. However, it is possible to disable this if you wish:

from getkey import plaform
my_platform = platform(interrupts={})
my_getkey = my_platform.getkey

Now my_getkey will be a function returning keys that won’t throw on Ctrl-C. Warning! This may make it difficult to exit a running script.

Plans

This library will not hit 1.0 until we can verify it works correctly with unicode & international keyboards. This is not yet tested.

Documentation

Installation

pip install getkey

The getkey library is compatible with python 2.7, and 3.2+.

Usage

Usage example:

from getkey import getkey, keys
key = getkey()
if key == keys.UP:
  ...  # Handle the UP key
elif key == keys.DOWN:
  ...  # Handle the DOWN key
... # Handle all other desired control keys
else:  # Handle text characters
  buffer += key
  print(buffer)

Please consult tools/keys.txt for a full list of key names available on different platforms, or tools/controls.txt for the abridged version just containing control (normally non-printing) characters.

API

There is one primary method:

getkey(blocking=True)

Reads the next key-stroke from stdin, returning it as an string.

A key-stroke can have:

  • 1 character for normal keys: ‘a’, ‘z’, ‘9’…

  • 1 character for certain control combinations: ‘x01’ as Ctrl-A, for example

  • more for other control keys (system dependent, but with portable names)

  • check tools/keys.txt for keys available on different systems.

Interpreting the keycode response is made easier with the keys object:

keys

Contains portable names for keys, so that keys.UP will mean the up key on both Linux or Windows, even though the actual key codes are different.

Because the list of key names is generated dynamically, please consult tools/keys.txt for a full list of key names. It is not necessary to use key names for single characters: if the user pushes a the key returned is very portably just that single character a itself.

keys.name(code)

Returns the canonical name of the key which yields this key code on this platform. One key code may have multiple aliases, but only the canonical name will be returned. The canonical names are marked with an asterisk in tools/keys.txt.

OS Support

This library has been tested on both Mac & Windows, & the Mac keys should work much the same on Linux. If planning to use more esoteric control keys, please verify compatibility by checking

How to contribute

You can download the code, make some changes with their tests, and make a pull-request.

In order to develop or running the tests, you can do:

  1. Clone the repository.

git clone https://github.com/kcsaff/getkey.git
  1. Create a virtual environment:

virtualenv venv
  1. Enter in the virtual environment

source venv/bin/activate
  1. Install dependencies

pip install -r requirements.txt -r requirements-dev.txt
  1. Run tests

make

Please, Execute the tests before any pull-request. This will avoid invalid builds.

License

Copyright (c) 2014, 2015 Miguel Ángel García (@magmax9).

Copyright (c) 2016 K.C.Saff (@kcsaff)

Based on previous work on gist getch()-like unbuffered character reading from stdin on both Windows and Unix (Python recipe), started by Danny Yoo.

Licensed under the MIT license.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

getkey-0.6.5.tar.gz (13.8 kB view details)

Uploaded Source

File details

Details for the file getkey-0.6.5.tar.gz.

File metadata

  • Download URL: getkey-0.6.5.tar.gz
  • Upload date:
  • Size: 13.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for getkey-0.6.5.tar.gz
Algorithm Hash digest
SHA256 68c7c702c3b34deacf427f6c0f1fd66c5c2aa12d7801aa32442fc1a71c8ce059
MD5 1a6ef21e97b9eca4f285acd8396566de
BLAKE2b-256 74f23312ea94369f410967667eeca61d261cdf3037df6ea827078ac7c5321150

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page