2016-04-28 7 views
1

Wie kann ich bei der Verwendung von argparse entscheiden, ob etwas ein Positionsargument, ein optionales Argument oder ein Unterbefehl sein soll?Gibt es Regeln für die Verwendung von Argparse?

+0

Zuerst Sie entscheiden, was Sie wollen. Als nächstes verwenden Sie 'argparse'. Es hängt alles von dir ab. – zondo

+0

Gibt es Regeln oder Best Practices oder etwas? – polka

+0

Verwenden Sie Positionsargumente für Dinge, die erforderlich sind. Verwenden Sie optionale Argumente für Dinge, die nicht benötigt werden. Leider weiß ich nicht, was du mit "Unterbefehl" meinst. – zondo

Antwort

3

Ein Position Argument ist in der Regel erforderlich. Zum Beispiel, wenn Ihr Programm immer eine Datei zum Lesen übergeben werden muss, wäre diese Datei ein positionelles Argument.

Ein optionales Argument ist, nicht überraschend, optional. Dies kann ein Argument sein, das einen vernünftigen Standard haben kann (dh Ihr Programm läuft standardmäßig auf Port 8080, kann aber andere Ports akzeptieren) oder es könnte ein Flag sein, um optionales Verhalten einzuschalten (zB ein verbose Flag).

Ein Subparser wird normalerweise verwendet, wenn Sie einem einzelnen Skript eine ganze Reihe verschiedener Befehle hinzufügen möchten. Vielleicht kann Ihr Skript Dateien lesen oder schreiben, und die Operationen read und write erwarten verschiedene Flags, die sich nicht überschneiden. In diesem Fall wäre es sinnvoll, einen Subparser für die Operation read und einen Subparser für die Operation write zu haben, um das Parsen dieser Flags zu vereinfachen.

Die meisten einfachen Programme wollen mit positionellen und optionalen Argumenten bleiben: Sie werden normalerweise wissen, wann Sie tatsächlich einen Subparser verwenden müssen.

Hier ist eine (sehr gekünstelt) Beispielprogramm, das alle drei verwendet:

import argparse 

def parse_args(): 
    p = argparse.ArgumentParser() 
    p.add_argument("filename", help="Filename to interact with") 
    p.add_argument("-v", "--verbose", action="store_true", help="Turn on verbose mode") 

    subparsers = p.add_subparsers(title="Commands", dest="command") 

    read_p = subparsers.add_parser("read", help="read from FILENAME") 

    load_p = subparsers.add_parser("load", help="load from FILENAME") 
    return p.parse_args() 

if __name__ == "__main__": 
    args = parse_args() 

Und hier ist seine Hilfetext:

usage: foo.py [-h] [-v] filename {read,load} ... 

positional arguments: 
    filename  Filename to interact with 

optional arguments: 
    -h, --help  show this help message and exit 
    -v, --verbose Turn on verbose mode 

Commands: 
    {read,load} 
    read   read from FILENAME 
    load   load from FILENAME 
Verwandte Themen