269
9.6
Kommandozeilen-Argumente (Optionen)
9.5.1 Anwendung: Ausgabe von Tabellen
Wenn Sie die print()-Funktion geschickt verwenden, können Sie Tabellen mit ausgerich-
teten Spalten ausgeben. Im ersten Beispiel erstellen wir eine Wertetabelle. Die erste Spalte
enthält natürliche Zahlen, die zweite Spalte Quadratwurzeln, die auf drei Stellen hinter dem
Komma genau ausgegeben werden sollen. Die Feldweite für die zweite Spalte soll zehn Zei-
chen betragen. Die Funktion
sqrt(), die die Quadratwurzel berechnet, befindet sich im
Modul
math. Deshalb werden zunächst alle Namen (darunter auch der Funktionsname
sqrt) aus dem Modul math importiert:
Beachten Sie, dass die Gleitkommazahlen aus der Wurzelberechnung in einem einheitli-
chen Format geschrieben sind. Alle Zahlen haben 3 Stellen hinter dem Komma. Anstelle
von 3.0 für die Wurzel aus 9 steht in der Tabelle 3.000. Diese Formatierung wurde mit der
Standardfunktion
format() erzielt. Das zweite Argument im format()-Aufruf ist ein so
genannter Formatierungsstring. In diesem Fall hat er folgende Bedeutung:
8: Für die Darstellung der Zahl werden 8 Stellen reserviert.
.3: Es gibt 3 Nachkommastellen.
f: Datentyp float.
Mehr zur Formatierung erfahren Sie in Kapitel 13.
9.6 Kommandozeilen-Argumente (Optionen)
Ein einfacher Mechanismus zur Eingabe von Werten ist die Übergabe als Kommandozei-
len-Argumente (Optionen). Das heißt, beim Aufruf des Skripts in einem Konsolenfenster
des Betriebssystems (z.B. Unix-Shell oder MS-Windows-Eingabeaufforderung) werden
Eingabewerte – durch Leerzeichen getrennt – hinter den Namen des Skripts geschrieben
(Abbildung 9.6). Das allgemeine Format eines Programmstarts mit Optionen ist:
Im Beispiel (Abbildung 9.6) sind
caesar.py der Name des Skripts, Bein das erste Argu-
ment und
2 das zweite Argument.
>>> from math import *
>>> for x in range(6,12):
print(x, format(sqrt(x),"8.3f"), sep="\t")
6 2 .449
7 2 .646
8 2 .828
9 3 .000
10 3.162
11 3.317
python programmname option1 option2 ...
Kapitel 9
Ein- und Ausgabe
270
Abb. 9.6: Aufruf eines Skripts mit Kommandozeilen-Argumenten in einem Konsolenfenster
Zugriff auf Optionen
Mithilfe der Variablen argv (»Argumentevektor«) des Moduls sys kann auf die Kommando-
zeilen-Argumente zugegriffen werden. Diese Variable enthält eine Liste aller übergebenen
Argumente als Liste von Zeichenketten. Dabei ist
sys.argv[0] der Dateiname des Skripts,
sys.argv[1] das erste Argument (oder die erste Option) usw.
Beispiel
Das folgende Skript chiffriert einen String nach Caesars Algorithmus (Verschiebechiffre).
Die Funktionsweise dieses klassischen Verschlüsselungsverfahrens illustriert Abbildung 9.7.
Abb. 9.7: Das Prinzip der Verschiebechiffre
Man schreibt zwei Alphabete untereinander. Dabei ist das untere Alphabet um n Stellen
zyklisch nach links verschoben. Die Zahl n – also die Anzahl der Stellen, um die verschoben
wird – bezeichnet man in diesem Zusammenhang auch als Schlüssel. Bei der Chiffrierung
(Verschlüsselung) wird jeder Buchstabe des Klartextes durch den Buchstaben ersetzt, der im
verschobenen Alphabet genau darunter steht. Aus dem Klartext
BEIN wird auf diese Weise
mit
n=2 das verschlüsselte Wort DGKP (Abbildung 9.8).
Skript:
# caesar.py
import sys
klartext = sys.argv[1] #1
n = int(sys.argv[2])
chiffriert = ""
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
A
lphabet
C D E F G H I J K L M N O P Q R S T U V W X Y Z A B
n=2
nach links
verschobenes Alphabet
271
9.6
Kommandozeilen-Argumente (Optionen)
Erläuterung:
#1: Zunächst werden die Argumente aus der Liste sys.argv gelesen. Beachten Sie, dass
Kommandozeilen-Argumente immer Strings sind. Deshalb muss das zweite Argument mit
der Funktion
int() in eine ganze Zahl umgewandelt werden.
#2: Der Klartext wird in eine Folge von Großbuchstaben umgewandelt. Für jedes Zeichen
des Klartextes wird in der
for-Schleife ein verschlüsseltes Zeichen ermittelt und an den
zunächst leeren String chiffriert angehängt. Dazu wird die Unicode-Nummer ermittelt und
der Verschiebewert
n hinzuaddiert (#3).
#4: Wenn die neue Nummer größer als die Unicode-Nummer für das Z –, wird 25 abgezo-
gen, um die Nummer eines Buchstaben aus dem vorderen Teil des Alphabets zu erhalten
(zyklische Verschiebung).
#5: Leerzeichen werden nicht verschlüsselt, sondern bleiben erhalten.
Skripte mit Optionen testen
Abbildung 9.8 illustriert, wie man mit der Entwicklungsumgebung Pythonwin (Windows)
ein Programm mit Kommandozeilen-Argumenten testet. Das R
UN SCRIPT-Fenster erscheint,
wenn man im Menü F
ILE auf RUN klickte. Mit IDLE ist die Übergabe von Argumenten an das
zu testende Skript nicht möglich. Alternativ kann das Skript natürlich in einem Konsolen-
fenster aufgerufen werden.
Für Kommandozeilen-Argumente, die man häufig auch Optionen nennt, gibt es eine aus-
geklügelte Syntax, die aus der Unix-Welt stammt, aber auch unter Windows funktioniert.
Zum Schluss sei noch darauf hingewiesen, dass es für die Verarbeitung dieser Optionen ein
eigenes Python-Modul namens
getopt gibt. Aus Platzgründen gehen wir nicht mehr darauf
ein. Informationen dazu findet man in Python-Referenzwerken wie z.B. Python Ge-Packt.
klartext = klartext.upper() #2
for c in klartext:
n r = ord ( c ) + n #3
i f n r > o r d(" Z " ) : #4
n r -= 2 5
if c != " ":
chiffriert += chr(nr)
e l s e :
chiffriert += " " #5
print(chiffriert)

Get Python 3 - Lernen und professionell anwenden now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.