Argparse - 区分无选项、调用选项和带参数调用的选项?
Argparse - differentiate between no options, option invoked, and option invoked with argument?
举个例子:
#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”。
使用 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')
举个例子:
#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”。
使用 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')