Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
1 Einleitung
2 Überblick über Python
3 Die Arbeit mit Python
4 Der interaktive Modus
5 Grundlegendes zu Python-Programmen
6 Kontrollstrukturen
7 Das Laufzeitmodell
8 Basisdatentypen
9 Benutzerinteraktion und Dateizugriff
10 Funktionen
11 Modularisierung
12 Objektorientierung
13 Weitere Spracheigenschaften
14 Mathematik
15 Strings
16 Datum und Zeit
17 Schnittstelle zum Betriebssystem
18 Parallele Programmierung
19 Datenspeicherung
20 Netzwerkkommunikation
21 Debugging
22 Distribution von Python-Projekten
23 Optimierung
24 Grafische Benutzeroberflächen
25 Python als serverseitige Programmiersprache im WWW mit Django
26 Anbindung an andere Programmiersprachen
27 Insiderwissen
28 Zukunft von Python
A Anhang
Stichwort

Download:
- ZIP, ca. 4,8 MB
Buch bestellen
Ihre Meinung?

Spacer
 <<   zurück
Python von Peter Kaiser, Johannes Ernesti
Das umfassende Handbuch - Aktuell zu Python 2.5
Buch: Python

Python
gebunden, mit CD
819 S., 39,90 Euro
Galileo Computing
ISBN 978-3-8362-1110-9
Pfeil 17 Schnittstelle zum Betriebssystem
  Pfeil 17.1 Funktionen des Betriebssystems – os
    Pfeil 17.1.1 Zugriff auf den eigenen Prozess und andere Prozesse
    Pfeil 17.1.2 Zugriff auf das Dateisystem
  Pfeil 17.2 Umgang mit Pfaden – os.path
  Pfeil 17.3 Zugriff auf die Laufzeitumgebung – sys
    Pfeil 17.3.1 Konstanten
    Pfeil 17.3.2 Exceptions
    Pfeil 17.3.3 Hooks
    Pfeil 17.3.4 Sonstige Funktionen
  Pfeil 17.4 Informationen über das System – platform
    Pfeil 17.4.1 Funktionen
  Pfeil 17.5 Kommandozeilenparameter – optparse
    Pfeil 17.5.1 Taschenrechner – ein einfaches Beispiel
    Pfeil 17.5.2 Weitere Verwendungsmöglichkeiten
  Pfeil 17.6 Kopieren von Instanzen – copy
  Pfeil 17.7 Zugriff auf das Dateisystem – shutil
  Pfeil 17.8 Das Programmende – atexit


Galileo Computing - Zum Seitenanfang

17.5 Kommandozeilenparameter – optparse  Zur nächsten ÜberschriftZur vorigen Überschrift

Im vorletzten Abschnitt wurde gesagt, dass man über sys.argv auf die Kommandozeilenparameter zugreifen kann, die beim Aufruf des Programms übergeben wurden. Das ist richtig und funktioniert. Das Modul optparse erlaubt Ihnen jedoch einen wesentlich komfortableren Umgang mit Kommandozeilenparametern.

Doch zunächst möchten wir uns allgemein mit der Thematik der Kommandozeilenparameter befassen. Bislang wurden hier ausschließlich Konsolenprogramme behandelt, das heißt 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.

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 jetzt zum einen sogenannte Optionen und zum anderen sogenannte Argumente übergeben werden:

  • Ein Argument wird einfach 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 könnte beispielsweise folgendermaßen aussehen:
programm.py karl 1337 heinz
  • Neben den Argumenten können Optionen übergeben werden. Optionen sind, wie der Name sagt, optional und deshalb keyword arguments. 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 könnte 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 wurden 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 soll die Verwendung des Moduls optparse anhand zweier Beispiele besprochen werden.


Galileo Computing - Zum Seitenanfang

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

Das erste Beispiel soll ein einfacher Taschenrechner sein, 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

Das bedeutet, dass über die Option -o eine Rechenoperation festgelegt werden kann, die auf die beiden folgenden Argumente angewendet wird. Wenn die Option nicht angegeben wurde, sollen die Argumente addiert werden.

Zu Beginn des Programms muss die Klasse OptionParser des Moduls optparse eingebunden und instanziiert werden:

from optparse import OptionParser 
parser = OptionParser()

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

parser.add_option("-o", "--operation", dest="operation")

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 wären die Optionen -o und --operation gleichbedeutend. Der letzte Parameter, ein keyword argument wohlgemerkt, gibt an, unter welchem Namen der Wert der Option später im Programm verfügbar gemacht werden soll.

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

(optionen, args) = parser.parse_args()

Die Methode gibt ein Tupel mit zwei Werten zurück: zum einen eine Instanz, die alle übergebenen Optionen enthält (optionen), und zum anderen eine Liste mit allen weiteren Argumenten (args).

Um korrekt arbeiten zu können, müssen dem Taschenrechner-Programm exakt zwei Argumente übergeben worden sein, was wir an dieser Stelle im Quelltext überprüfen. Wenn die Anzahl der Argumente ungleich zwei ist, kann keine Berechnung durchgeführt werden und das Programm beendet sich:

if len(args) != 2: 
    parser.error("Es werden exakt zwei Argumente erwartet")

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

Als Nächstes legen wir ein Dictionary an, das alle möglichen Rechenoperationen als Schlüssel und die dazugehörigen Berechnungsfunktionen als jeweiligen Wert enthalten. 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, 
       None : lambda a, b: a + b 
       }

Prinzipiell braucht 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 optionen relativ 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.

op = optionen.operation 
if op in calc: 
    print "Ergebnis:", calc[op](float(args[0]), float(args[1])) 
else: 
    parser.error("%s ist keine Operation" % op)

Beachten Sie, dass im Falle einer nicht angegebenen Option das entsprechende Attribut nicht etwa nicht vorhanden ist, sondern lediglich None referenziert. Da None im Dictionary calc als Schlüssel geführt wird und auf die Berechnungsfunktion der Addition verweist, werden die beiden Argumente in einem solchen Fall schlicht zusammengezählt.


Galileo Computing - Zum Seitenanfang

17.5.2 Weitere Verwendungsmöglichkeiten  topZur vorigen Überschrift

In diesem Abschnitt soll das Beispielprogramm des letzten Abschnitts dahingehend erweitert werden, dass weitere Verwendungsmöglichkeiten des Moduls optparse hervorgehoben werden. Hier sehen Sie zunächst den Quellcode des veränderten Beispielprogramms:

from optparse import OptionParser
parser = OptionParser("calc2.py [Optionen] Operand1 Operand2") parser.add_option("-o", "--operation", dest="operation", help="Rechenoperation") parser.add_option("-v", "--verbose", action="store_true", dest="verbose", default=False, help="Schwafelmodus")
(optionen, args) = parser.parse_args() if len(args) != 2: parser.error("Es werden exakt zwei Argumente erwartet")
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, None : lambda a, b: a + b }
if optionen.verbose: print "Das Ergebnis wird berechnet" op = optionen.operation if op in calc: print "Ergebnis:", calc[op](float(args[0]), float(args[1])) else: parser.error("%s ist keine Operation" % op)

Zunächst einmal werden Sie feststellen, dass bei der Instanziierung von Option Parser ein String übergeben wurde. Zusätzlich haben auch die Aufrufe der Methode add_option ein weiteres keyword argument namens help spendiert bekommen. Diese Angaben sind zwar nicht notwendig, sollten jedoch getätigt werden, da die OptionParser-Instanz aus den dort übergebenen Strings automatisch eine Hilfeseite generiert, wenn das Programm mit den Optionen -h oder --help gestartet wird. In dieser Hilfeseite wird die Verwendung des Programms kurz umrissen. Dazu gehört eine Auflistung aller möglichen Optionen, jeweils mit einem kurzen erläuternden Satz. Für das obige Beispiel sieht der Hilfetext folgendermaßen aus:

Usage: calc2.py [Optionen] Operand1 Operand2 
 
Options: 
  -h, --help            show this help message and exit 
  -o OPERATION, --operation=OPERATION 
                        Rechenoperation 
  -v, --verbose         Schwafelmodus

Zusätzlich zu der bereits im ursprünglichen Beispielprogramm vorhandenen Option -o wurde eine weitere Option namens -v bzw. --verbose angelegt. Viele bekannte Programme verwenden die Option -v als Schalter, um das Programm in eine Art geschwätzigen Zustand zu versetzen. Das bedeutet, dass auch nicht essenzielle Statusmeldungen auf dem Bildschirm ausgegeben werden. Diese Funktionalität soll auch unser Beispielprogramm bekommen. Der geschwätzige Modus soll aktiviert werden, wenn -v oder --verbose angegeben wurden, und sonst deaktiviert bleiben. Programmintern sollte die Option daher als boolescher Wert ankommen.

Dazu werden der Methode add_option zwei weitere keyword arguments übergeben. Zum einen wird der Parameter action auf "store_true" gesetzt, was bedeutet, dass das dazugehörige Attribut verbose auf True gesetzt wird, wenn die Option -v vorhanden ist. Analog dazu wäre auch "store_false" für den umgekehrten Fall möglich gewesen.

Der zweite neue Parameter ist die Angabe eines Default-Wertes. Das ist der Wert, den das dazugehörige Attribut vebose annimmt, wenn die Option -v nicht vorhanden ist.

Der resultierende boolesche Wert optionen.verbose wird im Programm abgefragt, und dann wird eventuell eine zugegebenermaßen sinnlose Statusmeldung ausgegeben. Die Ausgabe des Programms sieht bei Angabe der Option -v folgendermaßen aus:

Das Ergebnis wird berechnet 
Ergebnis: 19.0

Damit wäre der grundlegende Funktionsumfang von optparse erläutert.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






 <<   zurück
  
  Zum Katalog
Zum Katalog: Python






Python
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Linux






 Linux


Zum Katalog: Ubuntu GNU/Linux






 Ubuntu GNU/Linux


Zum Katalog: Praxisbuch Web 2.0






 Praxisbuch Web 2.0


Zum Katalog: UML 2.0






 UML 2.0


Zum Katalog: Praxisbuch Objektorientierung






 Praxisbuch Objektorientierung


Zum Katalog: Einstieg in SQL






 Einstieg in SQL


Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für Fachinformatiker


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Galileo Press 2008
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.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de