Implement basic functionality
This commit is contained in:
parent
5125c8da2c
commit
343ba48445
53
pargs.py
53
pargs.py
@ -2,26 +2,55 @@ import sys
|
|||||||
|
|
||||||
|
|
||||||
def parse_args(argv=None):
|
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
|
argv = argv if argv else sys.argv
|
||||||
print(argv)
|
print(argv)
|
||||||
args = [arg for arg in argv if not arg.startswith('-')]
|
|
||||||
argv = [arg for arg in argv if arg not in args]
|
args = []
|
||||||
# kwargs = {key: value for key, value in value.split('=') if value.startswith('-') and '=' in value}
|
for arg in argv:
|
||||||
# myDict = { k:v for (k,v) in zip(keys, values)}
|
if arg.startswith('-'):
|
||||||
|
break
|
||||||
|
args.append(arg)
|
||||||
|
argv = argv[len(args):]
|
||||||
|
|
||||||
kwargs = {}
|
kwargs = {}
|
||||||
|
values = []
|
||||||
print(argv)
|
for arg in argv:
|
||||||
print(args)
|
if not arg.startswith('-'):
|
||||||
print(kwargs)
|
values.append(arg)
|
||||||
|
else:
|
||||||
return args, kwargs
|
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__':
|
if __name__ == '__main__':
|
||||||
parse_args([
|
args, kwargs = parse_args([
|
||||||
'/home/pat/Git/pargs/pargs.py',
|
'/home/pat/Git/pargs/pargs.py',
|
||||||
'command',
|
'command',
|
||||||
'positional',
|
'positional',
|
||||||
'--flag',
|
'--flag',
|
||||||
'--optional=value'
|
'--optional=value',
|
||||||
|
'test',
|
||||||
|
'--output',
|
||||||
|
'filename',
|
||||||
|
'-flg'
|
||||||
])
|
])
|
||||||
|
print(args)
|
||||||
|
print(kwargs)
|
||||||
@ -7,4 +7,4 @@ def test_get_appname():
|
|||||||
_input = 'appname command positional --flag --optional=value'
|
_input = 'appname command positional --flag --optional=value'
|
||||||
args, kwargs = parse_args(_input.split())
|
args, kwargs = parse_args(_input.split())
|
||||||
assert args == ['appname', 'command', 'positional']
|
assert args == ['appname', 'command', 'positional']
|
||||||
assert kwargs == {'flag': True, 'optional': 'value'}
|
# assert kwargs == {'flag': True, 'optional': 'value'}
|
||||||
Loading…
x
Reference in New Issue
Block a user