我想使用python的argparse
来配置从命令行输入的参数。解析参数的行为可以是:
None
- 如果名称为空,则默认为一个值。
- 到提供的值
示例代码可以是:
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 args
和args.generate_config is None
来实现。