48 lines
1.2 KiB
Python
48 lines
1.2 KiB
Python
import sys
|
|
|
|
|
|
__version__ = '0.1.3'
|
|
|
|
|
|
def parse_args(argv=None):
|
|
"""
|
|
Returns a tuple of (args, kwargs) from a given list of command line arguments.
|
|
Defaults to using `sys.argv`.
|
|
"""
|
|
argv = argv if argv else sys.argv
|
|
|
|
args = []
|
|
for arg in argv:
|
|
if arg.startswith('-'):
|
|
break
|
|
args.append(arg.replace('-', '_'))
|
|
|
|
kwargs = {}
|
|
values = []
|
|
for arg in argv[len(args):]:
|
|
if not arg.startswith('-'):
|
|
values.append(arg)
|
|
else:
|
|
if len(values):
|
|
kwargs[key] = values
|
|
values = []
|
|
key = arg[:2].lstrip('-') + arg[2:].replace('-', '_')
|
|
if arg.startswith('--'):
|
|
if '=' in arg:
|
|
key, value = key.split('=')
|
|
values.append(value)
|
|
kwargs[key] = values
|
|
else:
|
|
kwargs[key] = True
|
|
elif arg.startswith('-'):
|
|
for k in key:
|
|
kwargs[k] = True
|
|
key = arg[-1]
|
|
if len(values):
|
|
kwargs[key] = values
|
|
|
|
for k, v in kwargs.items():
|
|
if isinstance(v, list) and len(v) == 1:
|
|
kwargs[k] = v[0]
|
|
return (args, kwargs)
|