2016-11-16 73 views
2

举个例子:Argparse - 区分不带选项,调用选项和使用参数调用选项?

#thing.py 
import argparse 

parser = argparse.ArgumentParser() 
parser.add_argument("--show", nargs='?', action="store") 
args = parser.parse_args() 

如何对以下用途之间:

python thing.py 

python thing.py --show 

python thing.py --show all 

从本质上讲,我想做不同的事情,如果:

  • 用户指定任何选项
  • 用户自行指定“--show”选项
  • 用户使用字符串/参数指定“--show all”。

在add_argument使用default="foo"不起作用,因为它是测试时总是存在的 - 我没有办法知道用户是否确实指定了选项“--show”与否。

回答

5

使用const kwarg。如果没有指定选项,将使用default。如果该选项是自行提供的,则将使用const。如果该选项提供了值,则将使用该值。从文档

复制:

>>> parser = argparse.ArgumentParser() 
>>> parser.add_argument('--foo', nargs='?', const='c', default='d') 
>>> parser.add_argument('bar', nargs='?', default='d') 
>>> parser.parse_args(['XX', '--foo', 'YY']) 
Namespace(bar='XX', foo='YY') 
>>> parser.parse_args(['XX', '--foo']) 
Namespace(bar='XX', foo='c') 
>>> parser.parse_args([]) 
Namespace(bar='d', foo='d') 
+0

这正是我需要的!谢谢@mwchase – Locane