16. Anhang
**********


16.1. Interaktiver Modus
========================

Es gibt zwei Varianten der interaktiven *REPL*. Der klassische
einfache Interpreter wird auf allen Plattformen mit minimalen
Möglichkeiten zur Zeilensteuerung unterstützt.

On Windows, or Unix-like systems with "curses" support, a new
interactive shell is used by default since Python 3.13. This one
supports color, multiline editing, history browsing, and paste mode.
To disable color, see Controlling color for details.  Function keys
provide some additional functionality. "F1" enters the interactive
help browser "pydoc". "F2" allows for browsing command-line history
with neither output nor the *>>>* and *...* prompts. "F3" enters
"paste mode", which makes pasting larger blocks of code easier. Press
"F3" to return to the regular prompt.

Bei Verwendung der neuen interaktiven Shell beendest du diese durch
Eingabe von "exit" oder "quit". Das Hinzufügen von Aufrufklammern nach
diesen Befehlen ist nicht erforderlich.

Wenn die neue interaktive Shell nicht gewünscht ist, kann sie über die
Umgebungsvariable "PYTHON_BASIC_REPL" deaktiviert werden.


16.1.1. Fehlerbehandlung
------------------------

Wenn ein Fehler auftritt, gibt der Interpreter eine Fehlermeldung und
einen Stacktrace aus. Im interaktiven Modus kehrt er anschließend zum
primären Prompt zurück; stammte die Eingabe aus einer Datei, beendet
er sich nach der Ausgabe des Stacktrace mit einem Exit-Status ungleich
null. (Ausnahmen, die durch eine "except"-Klausel in einer
"try"-Anweisung behandelt werden, sind in diesem Kontext keine
Fehler.) Einige Fehler sind ausnahmslos fatal und führen zu einem
Beenden mit einem Exit-Status ungleich null; dies gilt für interne
Inkonsistenzen und einige Fälle von Speicherbrauch.Alle
Fehlermeldungen werden in den Standard-Fehlerstrom geschrieben, die
normale Ausgabe der ausgeführten Befehle wird in die Standardausgabe
geschrieben.

Die Eingabe des Unterbrechungszeichens (normalerweise "Control"-"C"
oder "Delete") am primären oder sekundären Prompt bricht die Eingabe
ab und kehrt zum primären Prompt zurück. [1] Das Auslösen einer
Unterbrechung, während ein Befehl ausgeführt wird, löst die Ausnahme
"KeyboardInterrupt" aus, die durch eine "try"-Anweisung behandelt
werden kann.


16.1.2. Ausführbare Python-Skripte
----------------------------------

Auf BSD-ähnlichen Unix-Systemen können Python-Skripte direkt
ausführbar gemacht werden, genau wie Shell-Skripte, indem man die
Zeile

   #!/usr/bin/env python3

(unter der Annahme, dass sich der Interpreter im "PATH" des Benutzers
befindet) an den Anfang des Skripts setzt und der Datei Rechte zur
Ausführung gibt. Die Zeichen "#!" müssen die ersten beiden Zeichen der
Datei sein. Auf einigen Plattformen muss diese erste Zeile mit einem
Unix-Zeilenende ("'\\n'") und nicht mit einem Windows-Zeilenende
("'\\r\\n'") enden. Beachte, dass das Rautezeichen "'#'" in Python
verwendet wird, um einen Kommentar zu beginnen.

Das Skript kann mithilfe des Befehls **chmod** ausführbar gemacht
werden.

   $ chmod +x myscript.py

Auf Windows-Systemen gibt es kein Konzept eines "Ausführungsmodus".
Der Python-Installer verknüpft ".py"-Dateien automatisch mit
"python.exe", sodass ein Doppelklick auf eine Python-Datei diese als
Skript ausführt. Die Dateiendung kann auch ".pyw" sein; in diesem Fall
wird das normalerweise erscheinende Konsolenfenster unterdrückt.


16.1.3. Die interaktive Startdatei
----------------------------------

Wenn du Python interaktiv nutzt, ist es oft praktisch, bei jedem Start
des Interpreters einige Standardbefehle ausführen zu lassen. Du kannst
dies erreichen, indem du eine Umgebungsvariable namens "PYTHONSTARTUP"
auf den Namen einer Datei setzt, die deine Startbefehle enthält. Dies
ähnelt der ".profile"-Funktion von Unix-Shells.

Diese Datei wird nur in interaktiven Sitzungen gelesen, nicht wenn
Python Befehle aus einem Skript liest und nicht, wenn "/dev/tty" als
explizite Quelle für Befehle angegeben wird (was sich ansonsten wie
eine interaktive Sitzung verhält). Sie wird im selben Namensraum
ausgeführt, in dem interaktive Befehle ausgeführt werden, sodass darin
definierte oder importierte Objekte ohne Pfadangabe in der
interaktiven Sitzung verwendet werden können. Du kannst in dieser
Datei auch die Prompts "sys.ps1" und "sys.ps2" ändern.

Wenn du eine zusätzliche Startdatei aus dem aktuellen Verzeichnis
lesen möchtest, kannst du dies in der globalen Startdatei mit Code wie
"if os.path.isfile('.pythonrc.py'): exec(open('.pythonrc.py').read())"
programmieren. Wenn du die Startdatei in einem Skript verwenden
möchtest, musst du dies explizit im Skript tun:

   import os
   filename = os.environ.get('PYTHONSTARTUP')
   if filename and os.path.isfile(filename):
       with open(filename) as fobj:
           startup_file = fobj.read()
       exec(startup_file)


16.1.4. Die Anpassungsmodule
----------------------------

Python bietet zwei Hooks zur Anpassung: sitecustomize und
usercustomize. Um zu sehen, wie das funktioniert, musst du zuerst den
Pfad deines benutzerbezogenen site-packages-Verzeichnisses finden.
Starte Python und führe diesen Code aus:

   >>> import site
   >>> site.getusersitepackages()
   '/home/user/.local/lib/python3.x/site-packages'

Jetzt kannst du in diesem Verzeichnis eine Datei namens
"usercustomize.py" erstellen und beliebig füllen. Sie wirkt sich auf
jeden Aufruf von Python aus, es sei denn, es wird mit der Option "-s"
gestartet, um den automatischen Import zu deaktivieren.

sitecustomize funktioniert auf die gleiche Weise, wird aber
typischerweise von einem Administrator des Computers im globalen site-
packages-Verzeichnis erstellt und vor usercustomize importiert. Siehe
die Dokumentation des "site"-Moduls für weitere Details.

-[ Fußnoten ]-

[1] Ein Problem mit dem GNU-Readline-Paket kann dies verhindern.
