2. Verwendung des Python-Interpreters¶
2.1. Aufrufen des Interpreters¶
Sofern der Python-Interpreter auf einem Rechner installiert ist, findet man ihn
normalerweise unter /usr/local/bin/python/python3.3
. Wenn man
/usr/local/bin
in den Suchpfad der Unix-Shell setzt, kann man den
Interpreter aufrufen durch [1]:
python3.3
Die Auswahl des Installationspfades für den Interpreter ist eine
Installationsoption, so dass auch eine Installation an anderer Stelle möglich
ist. Das ist mit dem örtlichen Python-Guru oder dem Systemadministrator zu
klären. (Eine populäre Alternative ist etwa /usr/local/python
)
Auf Windows-Rechnern befindet sich die Pythoninstallation meist unter
C:\Python33
, auch wenn man das während des Installationsvorgangs ändern
kann. Um dieses Verzeichnis zum Suchpfad hinzuzufügen, kann man folgendes
Kommando in die DOS-Eingabeaufforderung eingeben:
set path=%path%;C:\python33
Durch Eingabe eines End-Of-File-Zeichens (EOF; Strg-D
unter Unix,
Strg-Z
unter Windows) in der Eingabeaufforderung des Interpreters wird
der Interpreter mit dem Rückgabewert Null beendet. Falls er das nicht tut, kann
man den Interpreter durch folgende Befehlszeile beenden: quit()
.
Die Möglichkeiten des Interpreters hinsichtlich des Editierens der Eingabe sind
ziemlich beschränkt, lassen sich aber durch Einsatz der GNU-readline-Bibliothek
erweitern. Ob diese erweiterten Möglichkeiten verfügbar sind, lässt sich
überprüfen, indem man ein Strg-P
in die Eingabeaufforderung tippt. Wenn
es piepst, ist die “readline”-Unterstützung vorhanden. In diesem Fall findet man
im Anhang Interaktive Eingabe-Bearbeitung und Ersetzung des Verlaufs eine Einführung zu den einzelnen Tasten. Falls
kein Piepton zu hören ist oder ^P
erscheint, ist keine
“readline”-Unterstützung vorhanden und die einzige Möglichkeit zum Editieren ist
die Verwendung der Rücktaste (Backspace), um Zeichen in der aktuellen
Eingabezeile zu entfernen.
Grundsätzlich ist der Interpreter ähnlich zu bedienen wie eine Unix-Shell: Wird er mit einem tty-Gerät als Standardeingabe aufgerufen, liest und führt er interaktiv Befehle aus. Wird er mit einem Dateinamen als Argument oder mit einer Datei als Standardeingabe aufgerufen, liest und führt es ein Skript von dieser Datei aus.
Eine zweite Möglichkeit zum Starten des Python-Interpreters ist python -c
Befehl [arg] ...
, wodurch die Anweisung(en) in diesem Befehl ausgeführt
werden, analog zur -c
-Option der Shell. Da Python-Anweisungen oft
Leerzeichen oder sonstige Zeichen enthält, die von der Shell besonders behandelt
werden, sollte man den kompletten Befehl in einfache Anführungszeichen setzen.
Einige Python-Module sind auch als Skripte nützlich und können mit python -m
Modul [arg] ...
aufgerufen werden. Dadurch wird der Quelltext von Modul
ausgeführt, so als hätte man den vollständigen Namen in die Kommandozeile
eingegeben.
Achtung: Es gibt einen Unterschied zwischen python Datei
und python <
Datei
! Im zweiten Fall werden Eingabeanfragen des Programms, wie
beispielsweise der Aufruf sys.stdin.read()
, von Datei erledigt. Da diese
Datei aber schon vom Parser bis zum Ende gelesen wurde, bevor mit der Ausführung
begonnen wird, trifft das Programm sofort auf ein End-Of-File. In ersterem Fall
passiert das, was man normalerweise erwartet: Die Eingabeanfragen werden durch
diejenige Datei oder das Gerät erledigt, die bzw. das als Standardeingabe zur
Verfügung steht.
Wenn eine Skriptdatei verwendet wird, ist es oft hilfreich, das Skript
auszuführen und danach in den interaktiven Modus zu wechseln. Dies erreicht man
durch die Option -i
vor dem Skript.
2.1.1. Übergabe von Argumenten¶
Werden dem Interpreter ein Skriptname und zusätzliche Argumente übergeben, dann
werden diese in eine Liste von Zeichenketten gewandelt und an die Variable
argv
im sys
Modul übergeben. Zugriff darauf erhält man mittels import
sys
. Wenn kein Skript und keine Argumente übergeben wurden, dann ist
sys.argv[0]
eine leere Zeichenkette. Wenn der Skriptname als '-'
angegeben ist (das entspricht der Standardeingabe), dann wird sys.argv[0]
auf '-'
gesetzt. Wird -c
Befehl verwendet, dann erhält
sys.argv[0]
den Wert '-c'
, bei Verwendung von -m
Modul den
vollständigen Namen des gefundenen Moduls. Optionen, die nach -c
Befehl oder -m
Modul angegeben werden, werden nicht vom
Python-Interpreter verarbeitet, sondern werden als Werte an sys.argv
übergeben.
2.1.2. Interaktiver Modus¶
Wenn Befehle von einem tty (in der Regel wird das eine Konsole sein) gelesen
werden, spricht man vom interaktiven Modus des Interpreters. In diesem Modus
wartet der Interpreter mit der primären Eingabeaufforderung, die normalerweise
aus drei größer-als-Zeichen besteht (>>>
), auf Eingaben des Anwenders. Nach
Fortsetzungszeilen zeigt der Interpreter die sekundäre Eingabeaufforderung,
das sind normalerweise drei Punkte (...
). Außerdem zeigt der Interpreter
nach dem Start zunächst einen kurzen Informationstext an, der unter anderem die
Versionsnummer des Interpreters und einen Hinweis zum Urheberrecht enthält.
$ python3.3
Python 3.3 (py3k, Apr 1 2010, 13:37:42)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
Fortsetzungszeilen ergeben sich, wenn mehrzeilige Konstrukte eingegeben werden, wie zum Beispiel
bei der folgenden if
-Anweisung:
>>> the_world_is_flat = True
>>> if the_world_is_flat:
... print("Be careful not to fall off!")
...
Be careful not to fall off!
2.2. Der Interpreter und seine Umgebung¶
2.2.1. Fehlerbehandlung¶
Tritt ein Fehler auf, dann zeigt der Interpreter eine Fehlermeldung mit einem
Verlaufsbericht (Stacktrace) an. Im interaktiven Modus kehrt er dann zurück
zur primären Eingabeaufforderung. Wenn die Eingabe von einer Datei kam, beendet
er sich nach der Ausgabe des Fehlerberichts mit einem Rückgabewert ungleich
Null. Ausnahmen (Exceptions), die in einem try-except
-Block
verarbeitet werden, gelten in diesem Zusammenhang nicht als Ausnahmen. Manche
Fehler führen zum sofortigen Abbruch des Interpreters mit einem Rückgabewert
ungleich Null. Dies gilt etwa bei internen Inkonsistenzen oder Speichermangel.
Alle Fehlermeldungen werden in den Standardfehlerausgabestrom, gewöhnliche
Ausgaben von ausgeführten Befehlen wird in die Standardausgabe geschrieben.
Die Eingabe des Interrupt-Zeichens (normalerweise Strg-C
oder ENTF) bei
der primären oder sekundären Eingabeaufforderung bricht die Eingabe ab und kehrt
zur primären Eingabeaufforderung zurück. [2] Ein Interrupt während einer
Befehlsausführung verursacht eine KeyboardInterrupt
-Ausnahme, die durch
eine try
-Anweisung behandelt werden kann.
2.2.2. Ausführbare Python-Skripte¶
Auf BSD-ähnlichen Unixsystemen kann ein Pythonskript - ähnlich einem Shellskript - direkt ausführbar gemacht werden, indem man folgende Zeile (shebang) an den Anfang des Skripts schreibt
#!/usr/bin/env python3.3
Dabei wird vorausgesetzt, dass sich der Pfad zum Interpreter im PATH
des Benutzers befindet. Die #!
müssen die ersten zwei Zeichen der Datei
sein. Auf manchen Plattformen muss diese erste Zeile mit einem unixoiden
Zeilenende ('\n'
) enden und nicht mit einem Windows-Zeilenende ('\r\n'
).
Hinweis: Die Raute '#'
dient in Python dazu, einen Kommentar zu beginnen.
Einem solchen Skript können dann Ausführungsrechte mit Hilfe des Befehls chmod verliehen werden:
$ chmod +x myscript.py
Auf Windowssystemen gibt es den Begriff der “Ausführungsrechte” nicht. Das
Python-Installationsprogramm verknüpft automatisch .py
-Dateien mit
python.exe
, sodass ein Doppelklick auf eine Python-Datei diese als Skript
ausführt. Die Dateinamenserweiterung kann auch .pyw
lauten, in diesem Fall
wird das normalerweise auftauchende Konsolenfenster unterdrückt.
2.2.3. Kodierung von Quellcode¶
Standardmäßig werden Python-Quelltextdateien als in UTF-8 kodiert behandelt. In dieser Kodierung können die Zeichen der meisten Sprachen gleichzeitig in Stringliteralen, Bezeichnern und Kommentaren verwendet werden. Die Standardbibliothek verwendet allerdings nur ASCII-Zeichen für Bezeichner - eine Konvention, der jeder portable Code folgen sollte. Um alle diese Zeichen korrekt darzustellen, muss ein Editor erkennen, dass die Datei UTF-8 kodiert ist und einen Font benutzen, der alle Zeichen der Datei unterstützt.
Will man eine andere Kodierung als UTF-8 für eine Quelltextdatei verwenden, dann
muss unmittelbar unterhalb der #!
Zeile eine weitere, spezielle
Kommentarzeile eingefügt werden, durch die die Kodierung festgelegt wird
# -*- coding: Kodierung -*-
Mit dieser Angabe wird alles in der Quelltextdatei so behandelt, als hätte es
die Kodierung Kodierung an Stelle von UTF-8. Die Liste der möglichen
Kodierungen findet man in der Python Library Reference, in der Sektion zu
codecs
.
Wenn ein Editor beispielsweise keine UTF-8 kodierten Dateien unterstützt und auf die Benutzung einer anderen Kodierung besteht, sagen wir mal Windows-1252, kann man durch folgende Kodierungszeile
# -*- coding: cp-1252 -*-
immernoch alle Zeichen des Windows-1252 Zeichensatzes im Quelltext verwenden. Dieser spezielle Kodierungskommentar muss in der ersten oder zweiten Zeile der Datei stehen.
2.2.4. Die interaktive Startup-Datei¶
Wenn Python interaktiv genutzt wird, ist es gelegentlich hilfreich, bei jedem
Start des Interpreters einige Standardbefehle automatisch auszuführen. Das lässt
sich erreichen, indem man eine Umgebungsvariable namens PYTHONSTARTUP
erstellt, die auf eine Datei mit den Startup-Befehlen verweist. Dies ist
vergleichbar mit der .profile
-Datei von Unixshells.
Diese Datei wird nur in interaktiven Sitzungen gelesen. Wenn der Interpreter ein
Skript ausführt oder /dev/tty
explizit als Quelle angegeben wird - was
ansonsten einer interaktiven Sitzung entspricht -, wird die Startup-Datei nicht
berücksichtigt. Ausgeführt wird sie im selben Namensraum wie interaktive
Befehle, so dass Objekte, die in der Startup-Datei definiert oder importiert
werden, ohne Qualifizierung in der interaktiven Sitzung genutzt werden können.
Auch die Eingabeaufforderungen sys.ps1
und sys.ps2
lassen sich in dieser
Datei festlegen.
Sollen noch weitere Startup-Dateien aus dem aktuellen Verzeichnis gelesen
werden, dann lässt sich dies durch Code wie if os.path.isfile('.pythonrc.py'):
exec(open('.pythonrc.py').read())
in der globalen Datei erreichen. Soll die
Startup-Datei in einem Skript verwendet werden, muss das explizit in diesem
Skript geschehen:
import os
filename = os.environ.get('PYTHONSTARTUP')
if filename and os.path.isfile(filename):
exec(open(filename).read())
2.2.5. Die Customization Module¶
Python bietet zwei Haken, um es anzupassen: sitecustomize
und
usercustomize
. Um es auszuprobieren, musst du zuerst den Ort deines
Benutzer site-packages
Ordners herausfinden. Starte Python und gib dies
ein:
>>> import site
>>> site.getusersitepackages()
'/home/user/.local/lib/python3.2/site-packages'
Dort kannst du eine Datei namens usercustomize.py
anlegen und alles
gewünschte eingeben. Es wird jeden Aufruf von Python beeinflussen, es sei denn
der Aufruf enthält die Option -s
, um den automatischen Import zu
verhindern.
sitecustomize
funktioniert genauso, aber es wird typischerweise von einem
Administrator im globalen site-packages
Ordner erstellt und vor
usercustomize
importiert. Mehr dazu in der Dokumentation des
site
-Moduls.
Fußnoten
[1] | Unter Unix wird der Python 3.1 Interpreter nicht standardmäßig als
ausführbare Datei namens python installiert, damit es nicht zu einer
Kollision mit einer gleichzeitig installierten Python-2.x-Version kommt. |
[2] | Ein Problem mit dem GNU-readline-Paket kann dies verhindern. |