Python argparse - 检测列表参数是否在之后没有任何内容地传递

Python argparse - Detect if list argument is passed without anything afterwards

假设用户输入:

./args.py --create --mem 5

我的解析器看起来像这样:

parser.add_argument('--create', nargs='*', default=None)

通常 --create 接受带有 nargs='*' 的列表,但在这种情况下,用户未传递任何内容。

我想要发生的是 --create 在调用时设置为默认值,而不是我得到 []

问题:有没有办法检测 --create 是否出现在命令行参数中而后面没有任何内容?

这是一个简单的代码片段:

import argparse


parser = argparse.ArgumentParser()
parser.add_argument('--create', nargs='*', default=None)
options = parser.parse_args()
print(options)

以下是一些互动:

$ ./args.py 
Namespace(create=None)

$ ./args.py --create
Namespace(create=[])

$ ./args.py --create one
Namespace(create=['one'])

$ ./args.py --create one two
Namespace(create=['one', 'two'])

可以看到,如果用户不加--create标志,就是None。如果用户没有使用 --create 标志,您将得到一个空列表。