Несколько позиционных и необязательных аргументов с использованием docopt - PullRequest
1 голос
/ 08 апреля 2020

Я пытаюсь реализовать python3 CLI, используя пакет docopt. Я пытаюсь заставить мою программу принимать несколько позиционных входных файлов и, возможно, список выходных файлов. MWE для моей строки документации:

__doc__ = """
    Usage:
        test.py [INPUT...] [-o OUTPUT...] [-t TEST]

    Options:
        -o OUTPUT..., --output OUTPUT...  #One output file for each INPUT file [default: DEFAULT]
        -t TEST, --test TEST              #A test option
"""

Например, программный вызов как

test.py FILE_A FILE_B -o OUTFILE_A OUTFILE B -t true

Должен вернуть dict:

{'--output': ['OUTFILE_A', 'OUTFILE_B'],
 '--test': 'true',
 'INPUT': ['FILE_A', 'FILE_B']}

, но по какой-то причине всегда добавляется к аргументам INPUT:

{'--output': ['OUTFILE_A'],
 '--test': 'true',
 'INPUT': ['FILE_A', 'FILE_B', 'OUTFILE_B']}

1 Ответ

0 голосов
/ 09 апреля 2020

Опции в Docopt, к сожалению, могут принимать только один аргумент, поэтому [-o OUTPUT...] не будет работать. Остальные элементы будут, как вы заявляете, интерпретироваться как дополнительные аргументы.

Одним из способов решения этой проблемы является перемещение многоточия за пределы квадратных скобок:

Usage:
    test.py [INPUT...] [-o OUTPUT]... [-t TEST]

и использование его следующим образом:

test.py FILE_A FILE_B -o OUTFILE_A -o OUTFILE_B

Выглядит не так хорошо, но работает.

...