Skip to content

Alternatives

For programs that do not interact with the user in a continuous loop - programs that simply accept a set of arguments from the command line, return results, and do not keep the user within the program's environment - all you need are sys.argv (the command-line arguments) and argparse (for parsing UNIX-style options and flags). Though some people may prefer docopt or click to argparse.

The textual module is capable of building sophisticated full-screen terminal user interfaces (TUIs) that are not limited to simple text input and output; they can paint the screen with options that are selected from using the cursor keys and even mouse clicks. However, programming a textual application is not as straightforward as using cmd2.

Several Python packages exist for building interactive command-line applications approximately similar in concept to cmd applications. None of them share cmd2's close ties to cmd, but they may be worth investigating nonetheless.

Click is a Python package for creating beautiful command line interfaces in a composable way with as little code as necessary. It is more geared towards command line utilities instead of command line interpreters, but it can be used for either.

Getting a working command-interpreter application based on Click requires a good deal more effort and boilerplate code than cmd2. cmd2 focuses on providing an excellent out-of-the-box experience with as many useful features as possible built in for free with as little work required on the developer's part as possible. We believe that cmd2 provides developers the easiest way to write a command-line interpreter, while allowing a good experience for end users.

Historically, Python Prompt Toolkit was considered a powerful but more complex alternative to cmd2. However, as of version 4.0.0, cmd2 utilizes prompt-toolkit internally as its REPL engine. This means you get the power and cross-platform compatibility of prompt-toolkit with the easy-to-use API of cmd2.

If you are seeking a visually richer end-user experience and don't mind investing more development time, we would recommend checking out Textual as this can be used to build very sophisticated user interfaces in a terminal that are more akin to feature-rich web GUIs.