Perhaps, I should give an example of using plac. For instance, here is how you could implement a SVN-like tool with two commands ``checkout`` and ``commit``. The trick is to write a class with two methods ``checkout`` and ``commit`` and an attribute ``.commands`` listing them, and to call the class with ``plac.Interpreter.call``::
$ cat vcs.py class VCS(object): "A fictitious version control tool" commands = ['checkout', 'commit'] def checkout(self, url): return 'ok' def commit(self): return 'ok' if __name__ == '__main__': import plac; plac.Interpreter.call(VCS) The line ``plac.Interpreter.call`` instantiates the ``VCS`` class by passing to it the arguments in the command line and then calls the appropriate method. You can use the script as follows:: $ python vcs.py -h usage: vcs.py [-h] [args [args ...]] positional arguments: args optional arguments: -h, --help show this help message and exit $ python vcs.py checkout url ok $ python vcs.py commit ok plac_ takes care of parsing the command line, giving the correct error message if you pass wrong arguments or not enough arguments:: $ python vcs.py checkout usage: checkout url checkout: error: too few arguments You should realize that there is no real difference between a command-line argument parser featuring subcommands and an command interpreter, therefore the previous script also works as an interactive interpreter:: $ python vcs.py -i i> .help special commands ================ .help .last_tb custom commands =============== checkout commit i> checkout url ok i> commit ok There is full help support, i.e. you can ask for ``.help <command>`` for any command, including the special ones such as ``.help`` and ``.last_tb``. There is full support for autocompletion and command history too, provided you have the readline library installed (on Unices) or the pyreadline library (on Windows). plac also support a batch mode: you can write a set of commands on a file and have them executed by the plac runner. :: $ echo vcs-commands.plac #!vcs.py:VCS checkout url # nontrivial commands here commit $ plac_runner.py --batch vcs-commands.plac ok skip #<lines with comments are skipped> ok For more (including managing options, which I have not shown here) you should check the full documentation of plac. I have just uploaded release 0.7.2, which is required for this example to work. -- http://mail.python.org/mailman/listinfo/python-list