28
|
1 #!/usr/bin/env python
|
|
2
|
|
3 """
|
31
|
4 free-form arg parser
|
|
5
|
|
6 python parser.py foo -bar --fleem blah -gaz hi --flarg=play
|
|
7 ['foo', 'hi']
|
|
8 ['bar', 'gaz']
|
|
9 {'fleem': 'blah', 'flarg': 'play'}
|
28
|
10 """
|
30
|
11
|
31
|
12 def parse(args):
|
|
13 _args1 = []
|
|
14 _args2 = []
|
|
15 kw = {}
|
|
16 key = None
|
|
17 for arg in args:
|
|
18 if arg.startswith('-'):
|
|
19 if key:
|
|
20 raise Exception
|
|
21 if arg.startswith('--'):
|
|
22 if arg.startswith('---'):
|
|
23 raise Exception
|
|
24 arg = arg.lstrip('-')
|
|
25 if '=' in arg:
|
|
26 key, value = arg.split('=', 1)
|
|
27 kw[key] = value
|
|
28 key = None
|
|
29 else:
|
|
30 key = arg
|
|
31 else:
|
|
32 _args2.append(arg[1:])
|
|
33 else:
|
|
34 if key:
|
|
35 kw[key] = arg
|
|
36 key = None
|
|
37 else:
|
|
38 _args1.append(arg)
|
|
39 if key:
|
|
40 raise Exception
|
|
41 return _args1, _args2, kw
|
|
42
|
|
43 if __name__ == '__main__':
|
|
44 import sys
|
|
45 args, positional_args, kwargs = parse(sys.argv[1:])
|
|
46 print args
|
|
47 print positional_args
|
|
48 print kwargs
|