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指南。一种可能的解决方法是使用命令(关键字)而不是选项,因为它们的位置很重要。