我想用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>': []}
否则等同于第一个定义