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.