2016-10-29 2 views
0

Ich lese über argparse docs: https://docs.python.org/3.4/library/argparse.htmlWarum haben mehrere Parser?

Ich las die „Eltern“ doc für ArgumentParser und erwähnt, dass dies wird verwendet, wenn mehrere Parser gemeinsame args teilen. Ich frage mich, wann ich überhaupt "mehrere Parser" brauche?

+0

Suchen Sie nach "[argparse] eltern", um zu sehen, wie andere das Feature verwendet haben. Es ist nicht stark benutzt. Es kann praktisch sein, aber selten notwendig. Oft kann es durch eigene Utility-Funktionen ersetzt werden. – hpaulj

+0

@hpaulj wo suche ich das? –

+0

Genau hier auf Stackoverflow, dem [argparse] Tag und dem 'eltern' String. – hpaulj

Antwort

3

Die documentation ist schon recht einfach:

Anstatt die Definitionen dieser Argumente zu wiederholen, einen einzigen Parser mit allen geteilt Argumente und an die Eltern weitergegeben = Argument ArgumentParser verwendet werden kann

Ein Anwendungsfall das kommt in den Sinn, wenn Sie eine Menge von Skripts haben, die verschiedene Dinge zu einer Datenbank machen, die einen Benutzernamen und ein Passwort erfordert, auf die zugegriffen werden soll. Eines der Skripte ändert eine Tabelle, ein anderes ändert ein paar Berechtigungen ... aber all diese Skripte benötigen den Benutzernamen und das Passwort, um auf die Datenbank zuzugreifen, richtig?

Sie könnten einen Argumentarser "base" haben, der den Benutzernamen und das Kennwort erwartet (oder analysiert) und dann speziellere Parser mit mehr Argumenten hat. Zum Beispiel:

import argparse 


def make_basic_parser(): 
    parser = argparse.ArgumentParser(description='Basic parser (only username/password).', 
            add_help=False) 
    parser.add_argument('--username', type=str, help='Username to access database') 
    parser.add_argument('--password', type=str, help='Password to access database') 
    return parser 


def alter_table_parser(): 
    parent = make_basic_parser() 
    parser = argparse.ArgumentParser(description='Alter a table', parents=[parent]) 
    parser.add_argument('--table', type=str, help='Table to alter') 
    return parser 


if __name__ == "__main__": 
    parser = alter_table_parser() 
    args = parser.parse_args() 
    print("Received arguments: %s" % (args)) 

des Lauf bewirkt:

$ python ./stack_055_A.py --username foo --password bar --table baz 
Received arguments: Namespace(password='bar', table='baz', username='foo') 

So können Sie die Grund \ Parser wiederverwenden jedes Mal, wenn Sie einen Benutzername und ein Passwort benötigen.

Verwandte Themen