Kommandozeilenparameter werden häufig in Scripts verwaltet und python bietet mit dem Modul argparse eine exzellente Lösung dafür an!
Das folgende Beispiel kann als Vorlage für eigene Scripte benutzt werden, das Tutorial zu argparse liefert dabei weitere Informationen.
import argparse
def main():
# Initialisieren des parsers und setzen des Hilfetextes
parser = argparse.ArgumentParser(description='Add the default firewall ruleset to a given VM/network.')
# Kurze Option mit Hilfe-Text ('help=')
parser.add_argument('-H', help='Zeigt diese Hilfe an')
# Kurze Option; zwingend anzugeben (required='True')
parser.add_argument('-f', required='True')
# Lange Option; optional (falls 'required=' fehlt, wird Standardmaessig "false" angenommen)
parser.add_argument('--filename')
# Kombinierte kurze und lange Option
parser.add_argument('-m', '--message')
# Einfacher Schalter; wenn gesetzt wird die Variable auf "True" gesetzt
parser.add_argument('-v', action='store_true')
# Gruppe von Argumenten erstellen, welche sich gegenseitig auschliessen und somit nicht zusammen verwendet werden duerfen
group_output = parser.add_mutually_exclusive_group(required=False)
group_output.add_argument('-q', '--quiet', action='store_true', help='Ausgabe unterdruecken')
group_output.add_argument('--debug', action='store_true', help='Mehr Ausgabe als normal')
# Option mit Standardwert; falls nichts angegeben wird der Wert aus 'default=' genommen
parser.add_argument('--say', default='Hello World!')
# Option bei der nur bestimmte Werte zugelassen sind
parser.add_argument('--operating-system', choices=['linux', 'windows'])
global args
args = parser.parse_args()
## Verwenden der Argumente
# Die Argumente sind unter args.<ARGUMENT> gespeichert
# Pruefen ob Argument gesetzt ist
if args.v:
print "-v ist gesetzt"
else:
print "-v ist nicht gesetzt"
# Argument ausgeben
print "In der Option -f steht {args_f}.".format(args_f = args.f)
# Falls ein Bindestrich (-) im Argument vorkommt, muss dieses beim Zugriff mit einem Unterstrich (_) ersetzt werden
print "Dein Betriebssystem ist: {os}".format(os = args.operating_system)
if __name__ == "__main__":
exit ( main() ) |
import argparse
def main():
# Initialisieren des parsers und setzen des Hilfetextes
parser = argparse.ArgumentParser(description='Add the default firewall ruleset to a given VM/network.')
# Kurze Option mit Hilfe-Text ('help=')
parser.add_argument('-H', help='Zeigt diese Hilfe an')
# Kurze Option; zwingend anzugeben (required='True')
parser.add_argument('-f', required='True')
# Lange Option; optional (falls 'required=' fehlt, wird Standardmaessig "false" angenommen)
parser.add_argument('--filename')
# Kombinierte kurze und lange Option
parser.add_argument('-m', '--message')
# Einfacher Schalter; wenn gesetzt wird die Variable auf "True" gesetzt
parser.add_argument('-v', action='store_true')
# Gruppe von Argumenten erstellen, welche sich gegenseitig auschliessen und somit nicht zusammen verwendet werden duerfen
group_output = parser.add_mutually_exclusive_group(required=False)
group_output.add_argument('-q', '--quiet', action='store_true', help='Ausgabe unterdruecken')
group_output.add_argument('--debug', action='store_true', help='Mehr Ausgabe als normal')
# Option mit Standardwert; falls nichts angegeben wird der Wert aus 'default=' genommen
parser.add_argument('--say', default='Hello World!')
# Option bei der nur bestimmte Werte zugelassen sind
parser.add_argument('--operating-system', choices=['linux', 'windows'])
global args
args = parser.parse_args()
## Verwenden der Argumente
# Die Argumente sind unter args.<ARGUMENT> gespeichert
# Pruefen ob Argument gesetzt ist
if args.v:
print "-v ist gesetzt"
else:
print "-v ist nicht gesetzt"
# Argument ausgeben
print "In der Option -f steht {args_f}.".format(args_f = args.f)
# Falls ein Bindestrich (-) im Argument vorkommt, muss dieses beim Zugriff mit einem Unterstrich (_) ersetzt werden
print "Dein Betriebssystem ist: {os}".format(os = args.operating_system)
if __name__ == "__main__":
exit ( main() )
Sub-Commands
Bei grösseren Programmen möchte man das Programm vielleicht in verschiedene „Unter Programme“ aufteilen, wie beispielsweise beim Programm SVN.
Dabei macht man fuer jedes Sub-Kommando eine Funktion. welche von argparse dann aufgerufen wird:
import argparse
## Sub-Kommando Funktionen
# Funktion fuer das 'subcom' Kommando
def subcom(args):
if hasattr(args, 'etwas'):
print "Tu etwas mit dem Sub-Kommando {etwas}".format(etwas = args.etwas)
# Falls die Argumente: '--add' oder '--remove' gesetzt sind, rufe weitere
# Funktion in der Klasse: someClass() auf und uebergebe den Wert
if args.add:
someClass().add(args.add)
elif args.remove:
someClass().remove(args.remove)
# Klasse fuer das --add und --remove Kommando
class someClass:
def add(self, add):
print "Fuege {add} hinzu.".format(add = add)
def remove(self, remove):
print "Entferne {remove}".format(remove = remove)
def main():
# Initialisieren des parsers und setzen des Hilfetextes
parser = argparse.ArgumentParser(description='This is a command line arguments parser.')
# # Initialisieren des subparsers und setzen des Hilfetextes
subparsers = parser.add_subparsers(help='sub-command help')
## Allgemeine Optionen
# Diese Option kann unabhaengig vom Sub-Kommando vorkommen
parser.add_argument('-v', '--version', action='store_true', help='Version anzeigen')
## Sub-Kommando optionen
# Falls dieses Kommando benutzt wird, springt es zur Funktion: 'subcom()'
parser_subcom = subparsers.add_parser('subcom', help='Subkommando')
parser_subcom.add_argument('-e', '--etwas', required='true', help='Tu etwas')
group_subcom = parser_subcom.add_mutually_exclusive_group(required=False)
group_subcom.add_argument('--add', help='Fuege etwas hinzu')
group_subcom.add_argument('--remove', help='Entferne etwas')
parser_subcom.set_defaults(func=subcom)
# Parser laufen lassen
global args
args = parser.parse_args()
# Falls das Argument 'message' definiert ist, gebe die Nachricht aus
if hasattr(args, 'message'):
print "Tu etwa smit dem Haupt-Argument: {message}".format(message=args.message)
args.func(args)
if __name__ == "__main__":
exit ( main() ) |
import argparse
## Sub-Kommando Funktionen
# Funktion fuer das 'subcom' Kommando
def subcom(args):
if hasattr(args, 'etwas'):
print "Tu etwas mit dem Sub-Kommando {etwas}".format(etwas = args.etwas)
# Falls die Argumente: '--add' oder '--remove' gesetzt sind, rufe weitere
# Funktion in der Klasse: someClass() auf und uebergebe den Wert
if args.add:
someClass().add(args.add)
elif args.remove:
someClass().remove(args.remove)
# Klasse fuer das --add und --remove Kommando
class someClass:
def add(self, add):
print "Fuege {add} hinzu.".format(add = add)
def remove(self, remove):
print "Entferne {remove}".format(remove = remove)
def main():
# Initialisieren des parsers und setzen des Hilfetextes
parser = argparse.ArgumentParser(description='This is a command line arguments parser.')
# # Initialisieren des subparsers und setzen des Hilfetextes
subparsers = parser.add_subparsers(help='sub-command help')
## Allgemeine Optionen
# Diese Option kann unabhaengig vom Sub-Kommando vorkommen
parser.add_argument('-v', '--version', action='store_true', help='Version anzeigen')
## Sub-Kommando optionen
# Falls dieses Kommando benutzt wird, springt es zur Funktion: 'subcom()'
parser_subcom = subparsers.add_parser('subcom', help='Subkommando')
parser_subcom.add_argument('-e', '--etwas', required='true', help='Tu etwas')
group_subcom = parser_subcom.add_mutually_exclusive_group(required=False)
group_subcom.add_argument('--add', help='Fuege etwas hinzu')
group_subcom.add_argument('--remove', help='Entferne etwas')
parser_subcom.set_defaults(func=subcom)
# Parser laufen lassen
global args
args = parser.parse_args()
# Falls das Argument 'message' definiert ist, gebe die Nachricht aus
if hasattr(args, 'message'):
print "Tu etwa smit dem Haupt-Argument: {message}".format(message=args.message)
args.func(args)
if __name__ == "__main__":
exit ( main() )