我想要一个带有两个参数的选项。即希望能够使用
$ ./foo --path "old" "new"
Run Code Online (Sandbox Code Playgroud)
或者我真正想要的是:
$ ./foo --path "old" "new" --path "old" "new"
Run Code Online (Sandbox Code Playgroud)
但我不知道该怎么办?(事实上我担心这可能是不可能的......)
我知道如何有一个重复选项(见下文),但这实际上不是我想要的。
#!/usr/bin/env python3
'''foo
Usage:
foo [--path ARG]...
Options:
--path=ARG Repeating option.
'''
import docopt
args = docopt.docopt(__doc__)
print(args)
Run Code Online (Sandbox Code Playgroud)
可以调用
$ ./foo --path "old" --path "new"
Run Code Online (Sandbox Code Playgroud)
这可以使用 docopt 轻松存档。
句法:Usage: ./foo [--path <src> <dst>]...
输入:./foo --path src1 dst1 --path src2 dst2
代码:
>>> from docopt import docopt
>>> doc = "Usage: ./foo [--path <src> <dst>]..."
>>> argv = "--path old1 new1 --path old2 new2".split()
>>> args = docopt(doc, argv)
Run Code Online (Sandbox Code Playgroud)
结果:
{
"--path": 2,
"<dst>": [
"dst1",
"dst2"
],
"<src>": [
"src1",
"src2"
]
}
Run Code Online (Sandbox Code Playgroud)
现在用它做一些事情:
>>> if bool(args["--path"]):
>>> n = 1 if args["--path"] is True else if args["--path"]
>>> for i in range(0, n)]:
>>> print("{}, {}".format(args["<old>"][i], args["<new>"][i]))
src1, dst1
src2, dst2
Run Code Online (Sandbox Code Playgroud)
要添加多个位置参数,要求路径选项和参数的顺序正确,并带有括号“ ( ) ”。
Usage: ./foo [(--path <src> <dst>)]... <arg>...
Run Code Online (Sandbox Code Playgroud)
注意:如果您使用带有多个参数的选项,则docopt 不会引发SystemExit
用户混淆语法和输入的情况。./foo arg --path src dst
您必须自己处理它或在它前面添加另一个(子)命令。
Usage: ./foo [(--path <src> <dst>)]... bar <arg>...
Run Code Online (Sandbox Code Playgroud)