56 lines
1.3 KiB
Python
56 lines
1.3 KiB
Python
import sys
|
|
|
|
|
|
def parse_args(argv=None):
|
|
"""
|
|
Returns a tuple of (args, kwargs) from a given list of command line arguments.
|
|
"""
|
|
argv = argv if argv else sys.argv
|
|
print(argv)
|
|
|
|
args = []
|
|
for arg in argv:
|
|
if arg.startswith('-'):
|
|
break
|
|
args.append(arg)
|
|
argv = argv[len(args):]
|
|
|
|
kwargs = {}
|
|
values = []
|
|
for arg in argv:
|
|
if not arg.startswith('-'):
|
|
values.append(arg)
|
|
else:
|
|
if len(values):
|
|
kwargs[key] = values
|
|
values = []
|
|
key = arg.lstrip('-').replace('-', '_')
|
|
if arg.startswith('--'):
|
|
if '=' in arg:
|
|
key, value = arg.split('=')
|
|
values.append(value)
|
|
kwargs[key] = values
|
|
else:
|
|
kwargs[key] = True
|
|
elif arg.startswith('-'):
|
|
for k in key:
|
|
kwargs[k] = True
|
|
if len(values):
|
|
kwargs[key] = values
|
|
return (args, kwargs)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
args, kwargs = parse_args([
|
|
'/home/pat/Git/pargs/pargs.py',
|
|
'command',
|
|
'positional',
|
|
'--flag',
|
|
'--optional=value',
|
|
'test',
|
|
'--output',
|
|
'filename',
|
|
'-flg'
|
|
])
|
|
print(args)
|
|
print(kwargs) |