Docopt - 可选参数的多个值
Docopt - Multiple values for an optional argument
我想用 docopt
解析具有多个值的可选参数。下面是示例用法。
my_program.py --loc pcg acc
# or anything that achieve similar result
在解析之后,我希望有一个像这样的 python 列表
arguments["--loc"] = ["pcg", "acc"]
我四处浏览,通过传递 nargs
参数,发现这在 argparse
中是否可行。
我在 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>': []}
除此之外等同于第一个定义
我想用 docopt
解析具有多个值的可选参数。下面是示例用法。
my_program.py --loc pcg acc
# or anything that achieve similar result
在解析之后,我希望有一个像这样的 python 列表
arguments["--loc"] = ["pcg", "acc"]
我四处浏览,通过传递 nargs
参数,发现这在 argparse
中是否可行。
我在 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>': []}
除此之外等同于第一个定义