2016-04-21 90 views
3

我想才达到下一个行为:检查argparse参数设置,或使用默认值,或重写

python script.py 
> my_arg is None 

python script.py --my-arg 
> my_arg is "default" 

python script.py --my-arg some_value 
> my_arg is "some_value" 

如何设置该参数为Argparser?

我试过到目前为止:

#!/usr/bin/env python 
import argparse 

parser = argparse.ArgumentParser() 
parser.add_argument('--my-argument', nargs='?', default='default') 
args = parser.parse_args() 

print(args.my_argument) 

test.py我有default

回答

1

这个怎么样?使用append行动来区分非指定的情况下/ --my-arg规定的情况下:

>>> import argparse 
>>> 
>>> parser = argparse.ArgumentParser() 
>>> parser.add_argument('--my-arg', action='append', nargs='?', default=[]) 
>>> def parse(argv): 
...  args = parser.parse_args(argv) 
...  if not args.my_arg: 
...   return None 
...  return args.my_arg[0] or 'default' 
... 
>>> parse([]) # python script.py 
>>> parse(['--my-arg']) # python script.py --my-arg 
'default' 
>>> parse(['--my-arg', 'some_value']) # python script.py --my-arg some_value 
'some_value' 
+0

对于更复杂的情况下非常有趣的解决方案,它工作,但我找到了最简单的解决方案,我的相当简单的情况。 – dkiselev

3
这里

找到解决方案Python argparse: default value or specified value

我的脚本是这样的:

#!/usr/bin/env python 
import argparse 

parser = argparse.ArgumentParser() 
parser.add_argument('--my-argument', nargs='?', const='default') 
args = parser.parse_args() 

print(args.my_argument) 
+0

是的,'nargs =?' “默认”和“常量”为您提供这种3种方式的动作。 – hpaulj