#!/usr/bin/env python3 import argparse # sub-command functions def foo(args): print(args.x * args.y) def bar(args): print('((%s))' % args.z) def main(args): print('main: %s' % args) # create the top-level parser parser = argparse.ArgumentParser() parser.set_defaults(func=main) subparsers = parser.add_subparsers() # create the parser for the "foo" command parser_foo = subparsers.add_parser('foo') parser_foo.add_argument('-x', type=int, default=1) parser_foo.add_argument('y', type=float) parser_foo.set_defaults(func=foo) # create the parser for the "bar" command parser_bar = subparsers.add_parser('bar') parser_bar.add_argument('z') parser_bar.set_defaults(func=bar) # parse the args and call whatever function was selected args = parser.parse_args('foo 1 -x 2'.split()) args.func(args) # parse the args and call whatever function was selected args = parser.parse_args('bar XYZYX'.split()) args.func(args) # This fails with Python 3.3.0: args = parser.parse_args('') args.func(args)