包含多个带docopt的参数列表

jon*_*eto 8 python command-line-interface command-line-arguments docopt

我正在使用我的python应用程序作为命令行工具,功能docopt库.使用该库实现命令很容易.但是,目前我无法找到完成以下要求的方法:

文档字符串是:

"""
aTXT tool

Usage:
  aTXT <source>... [--ext <ext>...]

Options:
    --ext       message

"""
Run Code Online (Sandbox Code Playgroud)

从shell,我想写这样的东西:

atxt a b c --ext e f g
Run Code Online (Sandbox Code Playgroud)

docopt输出的结果字典如下:

 {'--ext': True,
 '<ext>': [],
 '<source>': ['a', 'b', 'c', 'e', 'f']}
Run Code Online (Sandbox Code Playgroud)

但是,我需要具备以下条件:

 {'--ext': True,
 '<ext>': ['e', 'f', 'g'],
 '<source>': ['a', 'b', 'c']}
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

Nan*_*ook 8

我无法找到将列表直接传递到Docopt参数字典的方法.但是,我已经找到了一个解决方案,它允许我将字符串传递给Docopt,然后将该字符串转换为列表.

您的Docopt 文档存在问题,我对其进行了修订,以便我可以测试特定于您的案例的解决方案.此代码是用Python 3.4编写的.

命令行 :

$python3 gitHubTest.py a,b,c -e 'e,f,g'
Run Code Online (Sandbox Code Playgroud)

gitHubTest.py

"""
aTXT tool

Usage:
  aTXT.py [options] (<source>)

Options:
  -e ext, --extension=ext    message

"""
from docopt import docopt

def main(args) :
    if args['--extension'] != None:
        extensions = args['--extension'].rsplit(sep=',')
        print (extensions)

if __name__ == '__main__':
    args = docopt(__doc__, version='1.00')
    print (args)
    main(args)
Run Code Online (Sandbox Code Playgroud)

回报:

{
'--extension': 'e,f,g',
'<source>': 'a,b,c'
}
['e', 'f', 'g']
Run Code Online (Sandbox Code Playgroud)

在main()中创建的变量'extensions'现在是您希望传入的列表.