2013-12-09 5 views
8

Mi piacerebbe progettare la mia applicazione a riga di comando in modo che una delle opzioni, chiamiamolo commento, può essere specificato più volte, ad esempio,Come specificare un argomento opzionale più volte in docopt

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

Questo può essere fatto con docopt? Ho controllato la homepage di docopt ma non ho trovato alcun riferimento a più occorrenze dello stesso argomento opzionale.

+1

io non sono sicuro di docopt, ma con argparse è possibile farlo utilizzando [aggiungere azione] (http://docs.python.org /dev/library/argparse.html#action) – smeso

risposta

4

Per riferimento, i documenti ufficiali possono essere found here at github.

Per rispondere alla domanda specifica, è possibile utilizzare un'ellissecon l'opzione opzionale [--my-option] e specificare che l'opzione accetta un argomento.

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

Esempio:

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

Arguments: 
    FILE  An argument for passing in a file. 

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

Specificando come [--comment=<arg>]... si assicura che opt [ '- commento'] è un elenco di tutti i commenti specificati.

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

porta a:

if __name__ == '__main__': 
    opts = docopt(__doc__) 
    opts['--comment'] == ['ASDF', 'QWERTY'] 
    opts['FILE'] == 'my_file' 
3

È possibile utilizzare ... per indicare un elemento ripetuto e [ ] per indicare che è facoltativo:

my_program [comment]... 

Indica comment è opzionale e può essere ripetuto.

+0

Ma omette la parte '--comment': Nel mio caso, ho altri argomenti posizionali richiesti, e questo sarebbe difficile da discernere e potenzialmente ambiguo. (ad esempio, mi piacerebbe. ./myprog.py --comment "ASDF" --commentare "QWERTY" my_file') – Thanatos