Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to specify one optional argument several times in docopt

Tags:

python

docopt

I'd like to design my command line application in a way that one option, let's call it comment, can be specified several times, e.g.,

$ ./my_app.py --comment="Comment 1" --comment="Comment 2"

Can this be done with docopt? I checked the docopt homepage but couldn't find any reference to multiple occurences of the same optional argument.

like image 425
andreas-h Avatar asked Dec 09 '13 10:12

andreas-h


2 Answers

For reference, the official docs can be found here at github.

To answer your specific question, you can use an ellipse ... with your optional option [--my-option] and specify that your option takes an argument.

I.e. [--my-option=ARG]... or [--my-option=<arg>]...

Example:

"""
Usage:
    my_program [--comment=ARG]... FILE

Arguments:
    FILE       An argument for passing in a file.

Options:
    --comment  Zero or more comments
"""

By specifying it as [--comment=<arg>]... you ensure that opt['--comment'] is a list of all the specified comments.

Executing: my_program --comment=ASDF --comment=QWERTY my_file

Leads to:

if __name__ == '__main__':
    opts = docopt(__doc__)
    opts['--comment'] == ['ASDF', 'QWERTY']
    opts['FILE'] == 'my_file'
like image 117
tgray Avatar answered Oct 16 '22 07:10

tgray


You can use ... to indicate a repeating element and [ ] to indicate that it is optional:

my_program [comment]...

This indicates comment is optional and can be repeated.

like image 33
Simeon Visser Avatar answered Oct 16 '22 08:10

Simeon Visser