47 lines
1.1 KiB
Python
47 lines
1.1 KiB
Python
import sys
|
|
|
|
|
|
__version__ = '0.2.1'
|
|
|
|
|
|
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 = {}
|
|
value = None
|
|
for arg in argv[len(args):]:
|
|
|
|
if not arg.startswith('-'):
|
|
if isinstance(kwargs[key], bool):
|
|
kwargs[key] = arg
|
|
elif isinstance(kwargs[key], str):
|
|
kwargs[key] = [kwargs[key]] + [arg]
|
|
elif isinstance(kwargs[key], list):
|
|
kwargs[key].append(arg)
|
|
continue
|
|
|
|
key = arg[:2].lstrip('-') + arg[2:].replace('-', '_')
|
|
|
|
if '=' in key:
|
|
key, value = key.split('=')
|
|
|
|
if not arg.startswith('--'):
|
|
for k in key[:-1]:
|
|
kwargs[k] = True
|
|
key = key[-1]
|
|
|
|
kwargs[key] = value if value else True
|
|
value = None
|
|
|
|
return (args, kwargs)
|