python argparse在命令行中提供或不存在arg时不同的值



我想使用python的argparse来配置从命令行输入的参数。解析参数的行为可以是:

  1. None
  2. 如果名称为空,则默认为一个值。
  3. 到提供的值

示例代码可以是:

parser = argparse.ArgumentParser()
parser.add_argument("-generate-config", metavar="-g", nargs="?")

解析:

>>> parser.parse_args(["-g"])  # leave it empty/didn't provide value
Namespace(generate_config=None)
>>> parser.parse_args(["-g", "config.txt"])
Namespace(generate_config='config.txt')
>>> parser.parse_args([])  # absent in the command line
Namespace(generate_config=None)

因此将其保留为空或不在命令行中提供参数,两个值都是None。我如何为这两种情况设置不同的行为/价值观?

在搜索stackflow后,在add_argument中设置default为argparse.SUPPRESS有很大的帮助,受到这个答案的启发。

parser = argparse.ArgumentParser()
parser.add_argument("-generate-config", metavar="-g", nargs="?", default=argparse.SUPPRESS)

:

>>> args = parser.parse_args(["-g"])  # leave it empty/didn't provide value
>>> args
Namespace(generate_config=None)
>>> args = parser.parse_args([])  # the argument is empty
>>> args
Namespace()
>>> args = parser.parse_args(["-g", "parameters.txt"])
>>> args
Namespace(generate_config='parameters.txt')

虽然不完全是我想要的,它仍然可以通过检查"generate_config" in argsargs.generate_config is None来实现。

最新更新