changeset 107:1da1baa03ac1

add a cli example program
author Jeff Hammel <jhammel@mozilla.com>
date Mon, 29 Nov 2010 07:21:30 -0800
parents 3c193788a0db
children e7948549afa1
files python/cli.py
diffstat 1 files changed, 56 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /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