Python: docoptで複数の引数を一つのオプションで取得したい


Pythonの引数解析に`docopt`を使おうと思ったのですが、思うように取得できません。

[code]

    from docopt import docopt
    
    __doc__ = """{f}
    Usage:
        {f} [[-w | --word-list] <word_list>...] [[-d | --data-list] <data_list>...]
    """.format(f=__file__)
    
    
    def main():
        args = docopt(__doc__)
        print(args)
    
    
    if __name__ == '__main__':
        main()
    
[/code]

これを実行すると、期待通りにはデータが入ってくれません。

[code]

    $ python option_test.py --word-list word1 word2 --data-list data1 data2
    {'--data-list': True,
     '--word-list': True,
     '-d': False,
     '-w': False,
     '<data_list>': [],
     '<word_list>': ['word1', 'word2', 'data1', 'data2']}
    
[/code]

期待する動きとしては`data_list`には`data`が、`word_list`には`word`が入って欲しいのですが･･･

[code]

    こうなって欲しい
    $ python option_test.py --word-list word1 word2 --data-list data1 data2
    {'--data-list': True,
     '--word-list': True,
     '-d': False,
     '-w': False,
     '<data_list>': ['data1', 'data2'],
     '<word_list>': ['word1', 'word2']}
    
[/code]

上記のようなオプション指定はそもそも不可能なのでしょうか。




上記のオプションではできそうにないようですので、カンマ区切りまたはスペース区切りで一つの変数として渡し、その後`split`することにしました。

[code]

    from docopt import docopt
    
    __doc__ = """{f}
    Usage:
        {f} [-w <word_list>] [-d <data_list>]
    
    Options:
        -w --word-list <word_list>  Setting words.
        -d --data-list <data_list>  Setting datas.
    """.format(f=__file__)
    
    
    def main():
        args = docopt(__doc__)
        print(args)
        word_list = args['--word-list'].split(',') # スペース区切りの場合は' '
        print(word_list)
        data_list = args['--data-list'].split(',') # スペース区切りの場合は' '
        print(data_list)
    
    if __name__ == '__main__':
        main()
    
[/code]

実行結果

[code]

    $ python option_test.py --word-list word1,word2 --data-list data1,data2
    {'--data-list': 'data1,data2',
     '--word-list': 'word1,word2'}
    ['word1', 'word2']
    ['data1', 'data2']
    
[/code]

スペース区切りの場合

[code]

    $ python option_test.py --word-list "word1 word2" --data-list "data1 data2"
    {'--data-list': 'data1 data2',
     '--word-list': 'word1 word2'}
    ['word1', 'word2']
    ['data1', 'data2']
    
[/code]




どうも質問で書かれているようにして期待するようにはできないみたいですね。  
でも、

[code]

    Usage:
        {f} [-w <word_list>...] [-d <data_list>...]
    
    Options:
      -w --word-list <word_list>...   Word List.
      -d --data-list <data_list>...   Data List.
    
[/code]

の様にして

[code]

    -w word1 -w word2 --data-list data1 -d data2
    
[/code]

（長いオプションでも短いオプションでも同じオプションを意味する）  
の様に引数を渡すと

[code]

    {'--data-list': ['data1', 'data2'],
     '--word-list': ['word1', 'word2']}
    
[/code]

の結果が得られます。

