Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (
Help us improve Python packaging - Donate today!

Like Python's cmd module, but uses regex based handlers instead!

Project Description

Sort of like Python's built in "cmd" module, but with regex handlers.

## Basic usage

# -*- coding: utf-8 -*-
from rcmd import Rcmd

r = Rcmd(__name__)

# Note: this will match "foo!", and "foober" - use "foo$" if you want
# to avoid this sort of stuff. Regexes are like that, yeah?
def foo(args):

@r.command(r"\d+!", with_cmd=True)
def fact(args, cmd):
print(cmd[:-1] + "?")


## Registering various handlers

Rcmd has a few handlers you can override (through decorators, of course!).

def emptyline():
# Called when the user doesn't type anything.

def default(line):
# Called when nothing matches the user's line.

def bang(args):
# Called when the user types "! [stuff]".
# Convenience since this is a handy addition.

def question(args):
# Called when the user types "? [stuff]"
# Convenience since this is a handy addition.

def precmd(line):
# Allows you to modify a line before it passes through
# the parser and matchers.
return line

def postcmd(stop, results, line):
# `stop` -> truthy values mean we'll stop next loop.
# `results` -> list of results any matching commands returned
# `line` -> the line the user entered
return stop, results

def preloop():
# Called before the initial command loop starts.

def postloop():
# Called after the command loop finishes.

## Example `help` command

This isn't built in because to each his own - you might want different things to me, so here's a basic structure you can work with.
This will let people do `help` and `help thing` (with optional `?` alias to help), and prints the `__doc__` of each command handler that _thing_ matches.

def help(args):
def tidy_regex(regex):
return regex.lstrip("^").rstrip("$")

def create_help(regex, functions, matching=None):
if matching is not None and not regex.match(matching):
return None
out = [">>> {0}".format(tidy_regex(regex.pattern))]
for i, function in enumerate(functions, 1):
if function.__doc__:
out.append("{0}. No help provided. :( ({1})".format(i, function.__name__))
return "\n".join(out)

# No arguments provided, just list things.
if not args or len(args) != 1:
for regex, functions in r.handlers.iteritems():
print(create_help(regex, functions))

# Do a search for matching handlers.
cmd, matched = args[0], True
print('"{0}" would run:\n'.format(cmd))
for regex, functions in r.handlers.iteritems():
t = create_help(regex, functions, matching=cmd)
if t is None:
matched = True

if not matched:
print("nothing :(\n")

Release History

This version
History Node


History Node


History Node


Download Files

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
(5.6 kB) Copy SHA256 Hash SHA256
Source None Dec 22, 2013

Supported By

Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Google Google Cloud Servers