Argparse - 区分没有选项,调用选项和使用参数调用的选项?

Loc*_*ane 2 python argparse

举个例子:

#thing.py
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("--show", nargs='?', action="store")
args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)

如何区分以下用法:

python thing.py

python thing.py --show

python thing.py --show all
Run Code Online (Sandbox Code Playgroud)

基本上,如果符合以下条件,我想做不同的事情:

  • 用户不指定选项
  • 用户自己指定"--show"选项
  • 用户使用字符串/参数指定"--show all".

default="foo"在add_argument中使用不起作用,因为它在测试时总是存在 - 我无法知道用户是否实际指定了选项"--show".

mwc*_*ase 5

使用constkwarg.如果未指定该选项,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')
Run Code Online (Sandbox Code Playgroud)