# HG changeset patch # User Jeff Hammel # Date 1291044090 28800 # Node ID 1da1baa03ac1bd5b88b44085ad0e8931ae35c492 # Parent 3c193788a0dbed56562096a1def04f65e7131f82 add a cli example program diff -r 3c193788a0db -r 1da1baa03ac1 python/cli.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/python/cli.py Mon Nov 29 07:21:30 2010 -0800 @@ -0,0 +1,56 @@ +#!/usr/bin/env python + +""" +program illustrating command line in the form of +``--option foo`` or ``--option=foo`` goes to a (key,value) paid +and ``-tag`` gets appended to a list. Further options go to a further list:: + + >>> main(['-foo', '--bar=fleem', 'baz']) + (['foo'], {'bar': 'fleem'}, ['baz']) +""" + +import sys + +class ParserError(Exception): + """error for exceptions while parsing the command line""" + +def main(_args=sys.argv[1:]): + + # return values + _dict = {} + tags = [] + args = [] + + # parse the arguments + key = None + for arg in _args: + if arg.startswith('---'): + raise ParserError("arguments should start with '-' or '--' only") + elif arg.startswith('--'): + if key: + raise ParserError("Key %s still open" % key) + key = arg[2:] + if '=' in key: + key, value = key.split('=', 1) + _dict[key] = value + key = None + continue + elif arg.startswith('-'): + if key: + raise ParserError("Key %s still open" % key) + tags.append(arg[1:]) + continue + else: + if key: + _dict[key] = arg + continue + args.append(arg) + + # return values + return (_dict, tags, args) + +if __name__ == '__main__': + _dict, tags, args = main() + print _dict + print tags + print args