Aufruffunktion basierend auf argparse
Ich bin neu in python und derzeit mit ihm zu spielen.
Ich habe ein script, das einige API-Aufrufe an ein Gerät. Ich würde gerne die Funktionalität erweitern und verschiedene Funktionen aufrufen auf der Grundlage der Argumente beim Aufruf des Skripts.
Derzeit habe ich die folgenden:
parser = argparse.ArgumentParser()
parser.add_argument("--showtop20", help="list top 20 by app",
action="store_true")
parser.add_argument("--listapps", help="list all available apps",
action="store_true")
args = parser.parse_args()
Ich habe auch ein
def showtop20():
.....
und
def listapps():
....
Wie kann ich die Funktion aufrufen (und nur diese) basiert auf dem argument gegeben?
Ich will nicht zu laufen
if args.showtop20:
#code here
if args.listapps:
#code here
als ich mich bewegen will, die unterschiedlichen Funktionen zu einem Modul später halten die zentrale ausführbare Datei sauber und ordentlich.
InformationsquelleAutor der Frage f0rd42 | 2014-12-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da es scheint, wie Sie wollen, um eine und nur eine Funktion in Abhängigkeit der gegebenen Argumente, ich schlage vor, Sie verwenden eine obligatorische positionelle argument
./prog command
anstelle von optionalen Argumenten (./prog --command1
oder./prog --command2
).so, so etwas sollte es tun:
InformationsquelleAutor der Antwort Hannes Ovrén
Gibt es viele Möglichkeiten, skinning-diese Katze. Hier ist einer, der mit
action='store_const'
(inspiriert durch die dokumentierten subparser Beispiel):Mit einem gemeinsamen
dest
jeder Aktion legt seine Funktion (const
) im gleichen Namensraum-Attribut. Die Funktion wird aufgerufen durchargs.cmd()
.Und wie in der dokumentiert subparsers Beispiel, diese Funktionen geschrieben werden kann, so wie andere Werte verwenden aus dem Namespace.
Besseren Vergleich, hier das äquivalent subparsers Fall:
Wie dargestellt in der Dokumentation, subparsers können Sie definieren verschiedene parameter für jeden der Befehle.
Und natürlich sind alle diese
add
argument oder parser-Anweisungen erstellt werden könnte in einer Schleife über eine Liste oder ein dictionary, das Paare eine Taste mit einer Funktion.Ein weiterer wichtiger Aspekt - welche Art der Nutzung und helfen wollen Sie? Die verschiedenen Ansätze generieren sehr unterschiedliche Hilfe-Nachrichten.
InformationsquelleAutor der Antwort hpaulj
Wenn Ihre Funktionen sind "einfach genug" nehmen Sie Vorteil von
type
parameter https://docs.python.org/2.7/library/argparse.html#typeIn deinem Beispiel (auch wenn Sie nicht benötigen, einen umgewandelten Wert):
Dieses einfache Skript:
Geben:
InformationsquelleAutor der Antwort klashxx
Zumindest von dem, was Sie beschrieben haben,
--showtop20
und--listapps
Klang mehr wie sub-Befehle als Optionen. Wenn dies der Fall ist, können wir subparsers für die Erreichung Ihrer gewünschten Ergebnis. Hier ist ein proof-of-concept:InformationsquelleAutor der Antwort Six