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

本质上,如果出现以下情况,我想做不同的事情:

在 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')