Python 使用docopt的多个位置参数和可选参数
我正在尝试使用Python 使用docopt的多个位置参数和可选参数,python,command-line-interface,docopt,Python,Command Line Interface,Docopt,我正在尝试使用docopt包实现python3 CLI。我正在尝试让我的程序接受多个位置输入文件,以及(可选)一个输出文件列表。 我的文档字符串的MWE是: \uuuu doc 用法: test.py[输入…][-o输出…][-t测试] 选项: -o输出…,--输出输出…#每个输入文件一个输出文件[默认值:默认值] -t测试,-TEST测试#测试选项 """ 例如,程序调用为 test.py文件\u A文件\u B-o输出文件\u A输出文件B-t true 应返回dict: {--outp
docopt
包实现python3 CLI。我正在尝试让我的程序接受多个位置输入文件,以及(可选)一个输出文件列表。
我的文档字符串的MWE是:
\uuuu doc
用法:
test.py[输入…][-o输出…][-t测试]
选项:
-o输出…,--输出输出…#每个输入文件一个输出文件[默认值:默认值]
-t测试,-TEST测试#测试选项
"""
例如,程序调用为
test.py文件\u A文件\u B-o输出文件\u A输出文件B-t true
应返回dict:
{--output':['OUTFILE_A','OUTFILE_B'],
“--test”:“true”,
‘输入’:[‘文件A’,‘文件B’]}
但出于某种原因,它总是附加到输入参数中:
{--output':['OUTFILE_A'],
“--test”:“true”,
‘输入’:[‘文件A’、‘文件B’、‘输出文件B’]}
不幸的是,Docopt中的选项只能接受一个参数,因此[-o输出…]
将不起作用。当您声明时,其余元素将被解释为附加参数
解决此问题的一种方法是将省略号移到方括号外:
Usage:
test.py [INPUT...] [-o OUTPUT]... [-t TEST]
然后像这样使用它:
test.py FILE_A FILE_B -o OUTFILE_A -o OUTFILE_B
它看起来不太好,但很有效。不仅在Docopt中,而且在任何与POSIX兼容的命令行程序中,一个选项后应该只有一个参数。更重要的是,选项出现的顺序应该无关紧要。允许这样做的程序与POSIX不兼容,并且以非标准方式进行命令行解析。所以问题是Docopt是否应该遵循POSIX指南。一种可能的解决方法是使用命令(关键字)而不是选项,因为它们的位置很重要。