2013-12-09 6 views
8

ein optionales Argument angeben, ich meine Kommandozeilen-Anwendung in einer Weise gestalten, möchten, dass eine Option nennen es Kommentar werden kann mehrmals angegeben, lassen Sie zBWie mehrmals in docopt

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

Kann dies mit Docopt gemacht werden? Ich habe die Docopt-Homepage überprüft, konnte aber keinen Verweis auf mehrere Vorkommen desselben optionalen Arguments finden.

+1

ich docopt bin nicht sicher, aber mit argparse können Sie es mit [anhängen Aktion] (http://docs.python.org /dev/library/argparse.html#action) – smeso

Antwort

4

Als Referenz können die offiziellen Dokumente found here at github sein.

Um Ihre spezifische Frage zu beantworten, können Sie eine Ellipse ... mit Ihrer optionalen Option [--my-option] verwenden und angeben, dass Ihre Option ein Argument benötigt.

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

Beispiel:

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

Arguments: 
    FILE  An argument for passing in a file. 

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

Durch sie als [--comment=<arg>]... Angabe Sie, dass opt gewährleisten [ '- Kommentar'] ist eine Liste aller angegebenen Kommentare.

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

führt zu:

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

können Sie ... verwenden, um ein sich wiederholendes Element, um anzuzeigen, und [ ] um anzuzeigen, dass es optional ist:

my_program [comment]... 

Dies zeigt comment optional ist und wiederholt werden kann.

+0

Aber der '- Kommentar' Teil fehlt: In meinem Fall habe ich andere erforderliche Positionsargumente, und dies wäre schwer zu erkennen und möglicherweise mehrdeutig. (z. B. möchte ich './myprog.py - Kommentar" ASDF "- Kommentar" QWERTY "my_file") – Thanatos