Rheinwerk Computing < openbook >

 
Inhaltsverzeichnis
1 Einleitung
2 Die Programmiersprache Python
Teil I Einstieg in Python
3 Erste Schritte im interaktiven Modus
4 Der Weg zum ersten Programm
5 Kontrollstrukturen
6 Dateien
7 Das Laufzeitmodell
8 Funktionen, Methoden und Attribute
9 Informationsquellen zu Python
Teil II Datentypen
10 Das Nichts – NoneType
11 Operatoren
12 Numerische Datentypen
13 Sequenzielle Datentypen
14 Zuordnungen
15 Mengen
16 Collections
17 Datum und Zeit
18 Aufzählungstypen – Enum
Teil III Fortgeschrittene Programmiertechniken
19 Funktionen
20 Modularisierung
21 Objektorientierung
22 Ausnahmebehandlung
23 Iteratoren
24 Kontextobjekte
25 Manipulation von Funktionen und Methoden
Teil IV Die Standardbibliothek
26 Mathematik
27 Kryptografie
28 Reguläre Ausdrücke
29 Schnittstelle zu Betriebssystem und Laufzeitumgebung
30 Kommandozeilenparameter
31 Dateisystem
32 Parallele Programmierung
33 Datenspeicherung
34 Netzwerkkommunikation
35 Debugging und Qualitätssicherung
36 Dokumentation
Teil V Weiterführende Themen
37 Anbindung an andere Programmiersprachen
38 Distribution von Python-Projekten
39 Grafische Benutzeroberflächen
40 Python als serverseitige Programmiersprache im WWW – ein Einstieg in Django
41 Wissenschaftliches Rechnen
42 Insiderwissen
43 Von Python 2 nach Python 3
A Anhang
Stichwortverzeichnis

Download:
- Beispielprogramme, ca. 464 KB

Jetzt Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Python 3 von Johannes Ernesti, Peter Kaiser
Das umfassende Handbuch
Buch: Python 3

Python 3
Pfeil 30 Kommandozeilenparameter
Pfeil 30.1 Taschenrechner – ein einfaches Beispiel
Pfeil 30.2 Ein weiteres Beispiel
 
Zum Seitenanfang

30    Kommandozeilenparameter Zur vorigen ÜberschriftZur nächsten Überschrift

Im Abschnitt über das Modul sys der Standardbibliothek haben wir die globale Liste sys.argv besprochen, mithilfe derer Sie auf die Kommandozeilenparameter zugreifen können, die beim Aufruf eines Programms übergeben wurden. Dieser rudimentäre Zugang zu den Kommandozeilenparametern ist jedoch oft nicht ausreichend. Das Modul argparse, das in diesem Abschnitt besprochen wird, erlaubt Ihnen einen komfortableren Umgang mit Kommandozeilenparametern.

Bislang wurden in diesem Buch ausschließlich Konsolenprogramme behandelt, also Programme, die eine rein textbasierte Schnittstelle zum Benutzer haben. Solche Programme werden üblicherweise aus einer Konsole, auch Shell genannt, gestartet. Eine Konsole ist beispielsweise die Eingabeaufforderung unter Windows.[ 125 ](In neueren Windows-Versionen ersetzt die PowerShell die Eingabeaufforderung.)

Unter Windows wird ein Python-Programm aus der Eingabeaufforderung heraus gestartet, indem in das Programmverzeichnis gewechselt und dann der Name der Programmdatei eingegeben wird. Hinter dem Namen können Optionen und Argumente übergeben werden:

  • Ein Argument wird hinter den Namen der Programmdatei geschrieben. Um einen Vergleich zu Funktionsparametern zu ziehen, könnte man von Positional Arguments sprechen. Das bedeutet vor allem, dass die Argumente anhand ihrer Reihenfolge zugeordnet werden. Ein Programmaufruf mit drei Argumenten kann beispielsweise folgendermaßen aussehen:
    programm.py karl 1337 heinz
  • Neben den Argumenten können Sie Optionen übergeben, die mit Keyword Arguments vergleichbar sind. Das bedeutet, dass jede Option einen Namen hat und über diesen angesprochen wird. Beim Programmaufruf müssen Optionen vor den Argumenten geschrieben und jeweils durch einen Bindestrich eingeleitet werden. Dann folgen der Optionsname, ein Leerzeichen und der gewünschte Wert. Ein Programmaufruf mit Optionen und Argumenten kann also folgendermaßen aussehen:
    programm.py -a karl -b heinz -c 1337 hallo welt
    In diesem Fall existieren drei Optionen namens a, b und c mit den Werten "karl", "heinz" und 1337. Zudem sind zwei Argumente angegeben: die Strings "hallo" und "welt".
    Neben diesen parameterbehafteten Optionen gibt es parameterlose Optionen, die mit einem Flag vergleichbar sind. Das bedeutet, dass sie entweder vorhanden (aktiviert) oder nicht vorhanden (deaktiviert) sind:
    programm.py -a -b 1 hallo welt
    In diesem Fall handelt es sich bei a um eine parameterlose Option.

Im weiteren Verlauf dieses Kapitels besprechen wir die Verwendung des Moduls argparse anhand zweier Beispiele.

 
Zum Seitenanfang

30.1    Taschenrechner – ein einfaches Beispiel Zur vorigen ÜberschriftZur nächsten Überschrift

Das erste Beispiel ist ein einfaches Taschenrechnerprogramm, bei dem sowohl die Rechenoperation als auch die Operanden über Kommandozeilenparameter angegeben werden.

Das Programm soll folgendermaßen aufgerufen werden können:

calc.py -o plus 7 5
calc.py -o minus 13 29
calc.py -o mal 4 11
calc.py -o geteilt 3 2

Über die Option -o wird eine Rechenoperation festgelegt, die auf die beiden folgenden Argumente angewendet wird. Wenn die Option -o fehlt, sollen die Argumente addiert werden.

Zu Beginn des Programms muss die Klasse ArgumentParser des Moduls argparse eingebunden und instanziiert werden:

from argparse import ArgumentParser
parser = ArgumentParser()

Jetzt können durch die Methode add_argument der ArgumentParser-Instanz erlaubte Optionen hinzugefügt werden. In unserem Fall ist es nur eine:

parser.add_argument("-o", "--operation", dest="operation", default="plus")

Der erste Parameter der Methode gibt den Kurznamen der Option an. Jede Option ist auch mit einer ausgeschriebenen Version des Namens verwendbar, sofern diese Alternative durch Angabe des zweiten Parameters gegeben ist. In diesem Fall sind die Optionen -o und --operation gleichbedeutend. Der dritte Parameter, wohlgemerkt ein Keyword-Argument, gibt an, unter welchem Namen der Wert der Option später im Programm verfügbar gemacht werden soll. Über den letzten Parameter wird ein Standardwert für diese Option festgelegt, der verwendet wird, wenn die Option nicht angegeben ist.

Neben der Option -o müssen noch die Argumente für die beiden Operanden hinzugefügt werden. Dabei werden der Name und der zulässige Datentyp der Argumente angegeben.

parser.add_argument("op1", type=float)
parser.add_argument("op2", type=float)

Nachdem alle Optionen und Argumente hinzugefügt worden sind, wird die Methode parse_args aufgerufen, die die Kommandozeilenparameter ausliest und in der gewünschten Form aufbereitet.

args = parser.parse_args()

Als Nächstes legen wir ein Dictionary an, das alle möglichen Rechenoperationen als Schlüssel und die dazugehörige Berechnungsfunktion als jeweiligen Wert enthält. Die Schlüssel sind dieselben, die über die Option -o angegeben werden können, sodass wir anhand des bei der Option übergebenen Strings direkt auf die zu verwendende Berechnungsfunktion schließen können:

calc = {
"plus" : lambda a, b: a + b,
"minus" : lambda a, b: a - b,
"mal" : lambda a, b: a * b,
"geteilt" : lambda a, b: a / b
}

Prinzipiell muss jetzt nur noch der Wert ausgelesen werden, der mit der Option -o übergeben wurde. Der Zugriff auf eine Option ist anhand der von parse_args zurückgegebenen Instanz args einfach, da jede Option unter ihrem gewählten Namen als Attribut dieser Instanz verfügbar ist. Der von uns gewählte Name für die Option -o war operation. Analog kann auf Argumente zugegriffen werden.

op = args.operation
if op in calc:
print("Ergebnis:", calc[op](args.op1, args.op2))
else:
parser.error("{} ist keine Operation".format(op))

Für Fehler, die aufgrund falscher oder fehlender Kommandozeilenparameter auftreten, eignet sich die Methode error der ArgumentParser-Instanz, die eine entsprechende Fehlermeldung ausgibt und das Programm beendet.

Bevor wir zu einem komplexeren Beispielprogramm übergehen, besprechen wir den Konstruktor der Klasse ArgumentParser sowie deren Methode add_argument im Detail.

ArgumentParser([description, epilog, prog, usage, add_help, argument_default])

Dem Konstruktor der Klasse ArgumentParser kann eine Reihe von Schlüsselwortparametern übergeben werden, von denen die wichtigsten hier kurz erläutert werden. Viele der Parameter beziehen sich auf die dynamisch generierte Hilfeseite, die das Modul argparse zur Verfügung stellt. Ein Beispiel zur Verwendung dieser Hilfeseite finden Sie im nächsten Abschnitt.

Parameter Bedeutung
description ein String, der auf der Hilfeseite vor der Erklärung der Optionen und Argumente angezeigt wird
epilog ein String, der auf der Hilfeseite nach der Erklärung der Optionen und Argumente angezeigt wird
prog Der Programmname, wie er auf der Hilfeseite angezeigt wird. Standardmäßig wird hier der Name der ausgeführten Datei verwendet.
usage Ein String, der die Verwendung des Programms mit seinen Kommandozeilenparametern zusammenfasst. Standardmäßig wird dieser String automatisch erzeugt.
add_help Gibt an, ob eine Hilfeseite über die Optionen -h bzw. --help angeboten werden soll.
Standardwert: True
argument_default Setzt einen globalen Standardwert für nicht angegebene Optionen oder Argumente. Der Wert argparse.SUPPRESS bewirkt, dass nicht angegebene Optionen oder Argumente ignoriert werden.
Standardwert: None

Tabelle 30.1    Schlüsselwortparameter des Konstruktors ArgumentParser

add_argument([*name_or_flags, action, nargs, const, default, type, choices, required, help, metavar, dest, version])

Die Methode add_argument fügt ein Argument bzw. eine Option zur Programmschnittstelle hinzu. Dabei kann eine Reihe von Parametern angegeben werden, von denen die wichtigsten hier besprochen werden.

Parameter Bedeutung
*name_or_flags Bei einem Argument ein einzelner String, der den Argumentnamen angibt. Bei einer Option eine Reihe von Strings, die die alternativen Namen der Option angeben. Zwischen einem Argument und einer Option wird anhand eines führenden Bindestrichs unterschieden.
action Spezifiziert, wie der programminterne Wert des Parameters aus dem vom Benutzer angegebenen Wert gebildet werden soll. Mögliche Werte sind:
  • "store": Speichert den Wert unmodifiziert.
  • "store_const": Speichert einen konstanten Wert. Dieser wird durch den Schlüsselwortparameter const festgelegt.
  • "store_true": wie store_const mit const=True
  • "store_false": wie store_const mit const=False
  • "append": Speichert den Wert als Element einer Liste. Dies ist sinnvoll, wenn die Mehrfachangabe einer Option zulässig sein soll.
  • "append_const": wie append mit dem konstanten Wert, der durch den Schlüsselwortparameter const festgelegt wird
  • "version": Gibt eine Versionsinformation aus und beendet das Programm. Der Schlüsselwortparameter version muss angegeben sein.
  • Standardwert: "store"
nargs Erlaubt es zu steuern, wie oft ein Argument oder eine Option angegeben werden darf bzw. muss. Die übergebenen Werte werden dann als Elemente einer Liste programmintern verfügbar gemacht. Mögliche Werte für nargs sind: eine ganze Zahl N für genau N-maliges Vorkommen, "?" für ein- oder keinmal, "*" für beliebig oft und "+" für beliebig oft, aber mindestens einmal.
Standardwert: 1, sofern nichts Gegenteiliges für action übergeben wird
default Gibt den Wert an, den eine Option annehmen soll, wenn kein entsprechender Wert vom Benutzer übergeben wurde.
Standardwert: None
type Normalerweise werden die Benutzerangaben als Strings interpretiert. Mithilfe des type-Parameters werden die Angaben automatisch in einen anderen Datentyp überführt.
choices ein iterierbares Objekt, das die Werte für eine Option oder ein Argument enthält, aus denen der Benutzer auswählen kann
required Legt fest, ob eine Option vom Benutzer angegeben werden muss.
help Ein String, der das Argument bzw. die Option beschreibt. Diese Beschreibung wird auf der automatisch generierten Hilfeseite angezeigt.
metavar Auf der Hilfeseite werden standardmäßig die eigentlich programminternen Namen der Argumente und Optionen verwendet, die für dest angegeben werden. Mithilfe des Parameters metavar lässt sich dieser Name ändern.
dest der programminterne Name eines Arguments bzw. einer Option

Tabelle 30.2    Parameter der Methode add_argument

 


Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

<< zurück
 Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Python 3 Python 3
Jetzt Buch bestellen

 Buchempfehlungen
Zum Rheinwerk-Shop: Einstieg in Python
Einstieg in Python


Zum Rheinwerk-Shop: Python. Der Grundkurs
Python. Der Grundkurs


Zum Rheinwerk-Shop: Algorithmen mit Python
Algorithmen mit Python


Zum Rheinwerk-Shop: Objektorientierte Programmierung
Objektorientierte Programmierung


Zum Rheinwerk-Shop: Raspberry Pi. Das umfassende Handbuch
Raspberry Pi. Das umfassende Handbuch


Zum Rheinwerk-Shop: Roboter-Autos mit dem Raspberry Pi
Roboter-Autos mit dem Raspberry Pi


Zum Rheinwerk-Shop: Neuronale Netze programmieren mit Python
Neuronale Netze programmieren mit Python


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo

 
 


Copyright © Rheinwerk Verlag GmbH 2020
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

 
[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern