Alternatives to cmd and cmd2¶
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 curses module produces applications that interact via a plaintext terminal window, but are not limited to simple text input and output; they can paint the screen with options that are selected from using the cursor keys. However, programming a curses-based application is not as straightforward as using cmd.
Several Python packages exist for building interactive command-line applications
approximately similar in concept to cmd applications. None of them
cmd2‘s close ties to cmd, but they may be worth investigating
nonetheless. Two of the most mature and full featured are:
Python Prompt Toolkit is a library for building powerful interactive command lines and terminal applications in Python. It provides a lot of advanced visual features like syntax highlighting, bottom bars, and the ability to create fullscreen apps.
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 either Python Prompt Toolkit or Click requires a good
deal more effort and boilerplate code than
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. If you are seeking a visually richer end-user experience and don’t
mind investing more development time, we would recommend checking out Python Prompt Toolkit.