включая более одного списка аргументов с docopt

Я использую для своего приложения Python в качестве инструмента командной строки функцию библиотеку docopt. С помощью этой библиотеки легко реализовать команды. Но пока я не мог найти способ выполнить следующее требование:

строка документации:

"""
aTXT tool

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

Options:
    --ext       message

"""

из оболочки я хочу написать что-то вроде этого:

atxt a b c --ext e f g

Словарь результатов из вывода docopt выглядит следующим образом:

 {'--ext': True,
 '<ext>': [],
 '<source>': ['a', 'b', 'c', 'e', 'f']}

Но мне нужно иметь следующее:

 {'--ext': True,
 '<ext>': ['e', 'f', 'g'],
 '<source>': ['a', 'b', 'c']}

Как мне поступить?


person Jonathan Prieto-Cubides    schedule 28.03.2015    source источник


Ответы (1)


Мне не удалось найти способ передать список непосредственно в словарь аргументов Docopt. Однако я разработал решение, которое позволило мне передать строку в Docopt, а затем преобразовать эту строку в список.

Есть проблемы с вашим документом Docopt, и я исправил их, чтобы протестировать решение, специфичное для вашего случая. Этот код был написан на Python 3.4.

командная строка :

$python3 gitHubTest.py a,b,c -e 'e,f,g'

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)

возвращает:

{
'--extension': 'e,f,g',
'<source>': 'a,b,c'
}
['e', 'f', 'g']

Переменная 'extensions', созданная в main(), теперь представляет собой список, который вы надеялись передать.

person Nanook    schedule 10.06.2015
comment
Хотелось бы, чтобы был способ сделать это правильно с помощью docopt ... Насколько я понимаю, иметь несколько списков, как хочет OP, совершенно законно. И это возможно с помощью argparse: stackoverflow.com/a/32763023/4671300 - person talz; 29.05.2018