2016-04-21 86 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