Oven logo

Oven

Published

Library to easily read single chars and key strokes

pip install readchar

Package Downloads

Weekly DownloadsMonthly Downloads

Requires Python

>=3.8

Dependencies

    GitHub Repository Latest PyPi version supported Python versions Project licence
    Automated testing results Coveralls results Number of PyPi downloads

    python-readchar

    Library to easily read single chars and keystrokes.

    Born as a python-inquirer requirement.

    Installation

    simply install it via pip:

    pip install readchar
    

    Or download the source code from PyPi.

    Usage

    Simply read a character or keystroke:

    import readchar
    
    key = readchar.readkey()
    

    React to different kinds of key-presses:

    from readchar import readkey, key
    
    while True:
      k = readkey()
      if k == "a":
        # do stuff
      if k == key.DOWN:
        # do stuff
      if k == key.ENTER:
        break
    

    Documentation

    There are just two methods:

    readchar.readchar() -> str

    Reads one character from stdin, returning it as a string with length 1. Waits until a character is available.

    As only ASCII characters are actually a single character, you usually want to use the next function, that also handles longer keys.

    readchar.readkey() -> str

    Reads the next keystroke from stdin, returning it as a string. Waits until a keystroke is available.

    A keystroke can be:

    • single characters as returned by readchar(). These include:
      • character for normal keys: a, Z, 9,...
      • special characters like ENTER, BACKSPACE, TAB,...
      • combinations with CTRL: CTRL+A,...
    • keys that are made up of multiple characters:
      • characters for cursors/arrows: 🡩, 🡪, 🡫, 🡨
      • navigation keys: INSERT, HOME,...
      • function keys: F1 to F12
      • combinations with ALT: ALT+A,...
      • combinations with CTRL and ALT: CTRL+ALT+SUPR,...

    Note CTRL+C will not be returned by readkey(), but instead raise a KeyboardInterupt. If you want to handle it yourself, use readchar().

    readchar.key module

    This submodule contains a list of available keys to compare against. The constants are defined depending on your operating system, so it should be fully portable. If a key is listed here for your platform, readkey() can read it, and you can compare against it.

    readchar.config class

    This static class contains configurations for readchar. It holds constants that are used in other parts of the code as class attributes. You can override/change these to modify its behaviour. Here is a description of the existing attributes:

    INTERRUPT_KEYS

    List of keys that will result in readkey() raising a KeyboardInterrupt.
    Default: [key.CTRL_C]

    OS Support

    This library actively supports these operating systems:

    • Linux
    • Windows

    Some operating systems are enabled, but not actively tested or supported:

    • macOS
    • FreeBSD / OpenBSD

    Theoretically every Unix based system should work, but they will not be actively tested. It is also required that somebody provides initial test results before the OS is enabled and added to the list. Feel free to open a PR for that.

    Thank you!

    How to contribute

    You have an issue problem or found a bug? You have a great new idea or just want to fix a typo? Great :+1:. We are happy to accept your issue or pull request, but first, please read our contribution guidelines. They will also tell you how to write code for this repo and how to properly prepare an issue or a pull request.


    Copyright (c) 2014-2022 Miguel Ángel García