Skip to main content

An interpreter framework

Project description


kmd allows to build command line driven shells with powerful tab-completion capabilities.

The kmd.Kmd class derives from cmd.Cmd and extends it in the following ways:

  1. Instead of Python’s readline module, kmd.Kmd uses the alternative rl readline bindings.

  2. Setup and tear-down of the readline completer have been moved to preloop and postloop respectively. Subclasses must make sure to call their parents’ implementations.

  3. Incomplete command names are automatically expanded if they are unique.

  4. Command aliases can be defined by extending the aliases dictionary. Alias names apply to all do_, complete_, and help_ attributes.

  5. Lines starting with ‘#’ are treated as comments. The new comment method is invoked, receiving the line as argument.

  6. It is now possible to configure the shell_escape_chars. The default is ‘!’.

  7. If a history_file is set, kmd.Kmd loads and saves the history in preloop and postloop.

  8. The new run method encapsulates the full execution cycle of a Kmd.

Package Contents


Implements the mechanics of a command shell, based on cmd.Cmd.


Implements a set of ready-to-use completions.


Defines constants and functions for writing completions.



Complete names of files and directories on the filesystem.


Complete names of users known to the system.


Complete names of hosts in the system’s /etc/hosts file.


Complete names of variables in the process environment.


Complete names of executables on the system PATH.


For further details please refer to the API Documentation.


kmd development is hosted on GitHub where it also has an issue tracker.


Installation requires Python 2.7 or higher.

Note: kmd uses the rl library which contains a C extension. It is a good idea to review its installation instructions and make sure all dependencies are in place.

To install the kmd package, type:

pip install kmd


2.3 - 2019-03-20

  • Clear lastcmd when EOF is hit to avoid an infinite loop. See Python issue 13500. [stefan]

  • Drop explicit GPL because the PSF license is GPL-compatible anyway. [stefan]

  • Update filename completion with new hooks. [stefan]

  • Stop hiding the quoting module in completions and make it available as kmd.quoting. [stefan]

  • Stop using rl.completer.reset because it overrides ~/.inputrc. [stefan]

  • Stop using 2to3. [stefan]

  • Require rl >= 3.0. [stefan]

2.2 - 2012-05-10

  • String and filename quoting was not respected when was called with arguments. [stefan]

  • Switch to a happier looking Sphinx theme. [stefan]

  • Require rl >= 2.2. [stefan]

2.1.2 - 2012-04-14

  • Update documentation more. [stefan]

2.1.1 - 2012-03-29

  • Update documentation. [stefan]

2.1 - 2011-11-05

  • Add Kmd.input method as extension point for subclasses. [stefan]

  • Make sure hostname completion survives a missing hosts file. [stefan]

  • Require rl >= 2.0.1. [stefan]

2.0 - 2011-10-06

  • Add Kmd.aliases dictionary to define command aliases. [stefan]

  • Refactor Kmd.do_help for easier customization. [stefan]

  • Make sure error messages go to stderr. [stefan]

  • Switch to pretty Sphinx-based docs. [stefan]

  • Require rl >= 2.0. [stefan]

1.0 - 2011-07-14

  • Initial release.

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 (39.7 kB view hashes)

Uploaded source

Built Distribution

kmd-2.3-py2.py3-none-any.whl (24.9 kB view hashes)

Uploaded 3 7

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page