Docopt - 可选参数的多个值



我想用docopt解析具有多个值的可选参数。下面是示例用法。

my_program.py --loc pcg acc
# or anything that achieve similar result

解析后,我希望有一个这样的 python 列表

arguments["--loc"] = ["pcg", "acc"]

我浏览了一下,通过传递论点,发现这在argparse中是否可行nargs

我在docopt中找不到任何类似的方法,这在docopt可行吗?如果没有,还有什么选择?

我能想到的另一种方法是要求用户指定用逗号分隔的值,并在解析过程中手动拆分它,如下所示。

my_program.py [--loc=<comma_separated_str>]

python代码中

locs = arguments["--loc"].split(",") if arguments["--loc"] else []

但是,这似乎很丑陋,所以我正在寻找一种适当的方法来使用docopt.

一种方法是使用省略号 (...( 运算符,以便选项可以用方括号重复零次或多次,或者用括号重复一次或多次。例如

"""Usage: my_program.py --help
my_program.py [--loc=<loc>]...
"""
from docopt import docopt
print(docopt(__doc__))

将给出以下输出

$ python my_program.py --loc=pcg --loc=acc
{'--help': False,
'--loc': ['pcg', 'acc']}

您正在寻找的定义可能是

"""
Usage: my_program.py --help
my_program.py [(--loc <loc>) [<loc>...]]
"""
from docopt import docopt
print(docopt(__doc__))

多个--loc值之间有空格

python3 my_program.py --loc pcg acc hah
{'--help': False,
'--loc': True,
'<loc>': ['pcg', 'acc', 'hah']}

--loc参数确实是可选的

$ python3 my_program.py
{'--help': False,
'--loc': False,
'<loc>': []}

不提供任何值--loc会导致错误

$ python3 my_program.py --loc
Usage: my_program.py --help
my_program.py [(--loc <loc>) [<loc>...]]

如果--loc可以在没有任何值的情况下使用,那么这个更简单的定义就可以了

"""
Usage: my_program.py --help
my_program.py [--loc <loc> ...]
"""
from docopt import docopt
print(docopt(__doc__))

导致

$ python3 my_program.py --loc
{'--help': False,
'--loc': True,
'<loc>': []}

否则等同于第一个定义

最新更新