Der Interpreter, eine interaktive Shell


Zu den Begriffen Interaktiv und Shell

Interaktive Shells sind wie Muschelgehäuse Interaktiv kommt aus dem Lateinischen "inter agere". Das Verb "agere" bedeutet unter anderem "tun", "treiben", "betreiben", "handeln". "inter" bezeichnet die zeitliche und örtliche Position zu Dingen und Ereignissen, also "zwischen" zwei oder "inmitten" (oder "unter") vielen Objekten, Personen oder Ereignissen. "inter agere" bedeutet also "dazwischen handeln". In diesem Sinne steht die interaktive Shell zwischen dem Anwender und dem Betriebssystem (Linux, Unix, Windows oder anderen) bzw. dem zu interpretierenden Programm (z.B. Python). Die interaktive Shell steht aber auch zeitlich zwischen den einzelnen Aktionen, d.h. zwischen den einzelnen Befehlen und Kommandos. Der Benutzer gibt einen Befehl ein, die Shell führt diesen unverzüglich aus, liefert sofort das Ergebnis und wartet dann auf den nächsten Befehl.

In Englisch steht das Wort "shell" für eine Schale, einen Panzer oder ganz allgemein eine Hülle oder Schutzhülle. "Shell" bezeichnet auch ein Schneckenhaus und das Gehäuse, das eine Muschel umschließt. Ebenso liegt eine Shell auch zwischen einem Betriebssystem und dem Benutzer. Wie eine Muschelschale schützt sie zum einen das Betriebssystem vor dem Benutzer und gleichzeitig erspart sie dem Benutzer die Benutzung der "primitiven" und schwer verständlichen Basisfunktionen, indem sie ihm komfortable Befehle zur Kommunikation mit dem Computer zur Verfügung stellt.

Auch die Programmiersprache Python bietet dem Anwender eine komfortable Kommandozeilen-Schnittstelle, die sogenannte Python-Shell, die man manchmal auch als interaktive Python-Shell bezeichnet. Man könnte meinen, dass es sich bei dem Begriff "interaktive Shell" um eine Tautologie handelt, da ja, so wie wir es oben beschrieben haben, Shells immer interaktiv sind. Dies ist jedoch nicht so: Es gibt auch vor allem im Umfeld von Linux und Unix Shells, die als Subshell aufgerufen werden und nicht interaktiv ausgeführt werden.

Benutzung der Python-Shell

Die meisten Linux-Distributionen kommen mit einem vorinstallierten Python und damit auch mit einer interaktiven Python Shell. Der Interpreter befindet sich üblicherweise im Pfad /usr/bin/ (aber manchmal auch in /usr/local/bin).

Man kann Python im interaktiven Modus aufrufen, indem man den Interpreter in einer Linux-Shell (Bash-Shell) ohne Parameter aufruft. Also

python

Python meldet sich mit Informationen über die installierte Version:

$ python
Python 2.7.11+ (default, Apr 17 2016, 14:00:29) 
[GCC 5.3.1 20160413] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 
Wenn man genauer auf die obige Ausgabe schaut, das heißt auf die Versionsnummer, erkennt man ein Problem. Wir wollten uns ja mit Python 3 beschäftigen, aber Python 2.7.6 ist installiert. In diesem Fall muss man gegebenenfalls Python3 nachinstallieren und anschließend mit python3 den interaktiven Interpreter starten:
$ python3
Python 3.5.1+ (default, Mar 30 2016, 22:46:26) 
[GCC 5.3.1 20160330] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
Ein einfacher Weg zu prüfen, welche Version installiert ist, ist nach der Eingabe von "python" die TAB-Taste zu drücken. Es folgt eine Auflistung von weiteren Optionen und Versionen, falls vorhanden.
bernd@venus:~$ python
python      python2.7   python3.5   python3m    
python2     python3     python3.5m  
bernd@venus:~$ python
Der Interpreter steht nun mit dem sogenannten Eingabeprompt (">>>") für Eingaben bereit. Man kann jetzt beliebigen Python-Code eingeben, der nach dem Quittieren mit der Eingabetaste (Return-Taste) sofort ausgeführt wird. So kann man sehr schnell interaktiv ein Hello-World-Programm "schreiben":
>>> print("Hello World")
Hello World
>>> 
print verlangt übrigens im Gegensatz zu Python 2.x zwingend eine Klammer. print ist eine Funktion in Python3 und Funktionen werden mit Klammern geschrieben.

Der interaktive Interpreter erlaubt noch eine Bequemlichkeit, die innerhalb eines Python-Skriptes nicht zulässig ist. Man kann einfach print weglassen und nur den Ausdruck hinschreiben. Er wird dann automatisch ausgegeben:
>>> "Hello World"
'Hello World'
>>> 


Verlassen der Python-Shell

Wir haben zwar gerade erst damit begonnen in der Python-Shell "herumzuspielen", dennoch wollen sicherlich einige das Programm bereits verlassen. Ctrl-C, was vielen Linux- und Unix-Benutzern häufig als erstes einfällt, funktioniert nicht! Den Python-Interpreter kann man per Kontrollsequenz nur mit Ctrl-D wieder verlassen oder unter Windows mit Ctrl-Z. Alternativ dazu, kann man die Python-Shell mittels Eingabe der Funktion exit() verlassen. Die Klammern hinter exit sind zwingend notwendig ab Python 3.



Python-Shell als "Taschenrechner"

Die interaktive Python-Shell kann man auch als einen simplen "Taschenrechner" nutzen. Man tippt einfach den gewünschten Ausdruck nach dem Prompt ein, und betätigt die Eingabetaste.

>>> 4.567 * 8.323 * 17
646.18939699999999
>>> 
Python kennt, wie die meisten anderen Programmiersprachen, die Regel "Punktrechnung geht vor Strichrechnung", wie wir im folgenden Beispiel sehen können:
>>> (1 + 42) *2
86
>>> 1 + 42 * 2
85
>>> 
Der jeweils letzte Ausgabewert wird vom Interpreter in einer speziellen Variablen automatisch gespeichert. Der Name der Variable ist einfach ein Unterstrich (underscore), also "_".
Das Ergebnis der letzten Berechnung kann man sich also wieder ausgeben lassen:
>>> _
85
>>> 
Der Unterstrich kann im Prinzip wie eine normale Variable benutzt werden:
>>> _ * 3
255
>>> 

Dies gilt allerdings nicht in einem Python-Skript oder Python-Programm!


Benutzung von Variablen

In der Python-Shell kann man auch ganz einfach Variablen benutzen. Wenn Sie genau wissen wollen, was es mit Variablen und Datentypen auf sich hat, empfehlen wir in unserem Kapitel über Datentypen und Variablen weiterzulesen. Das folgende Beispiel wendet sich an Benutzer, die bereits ein wenig Erfahrung mit Programmierung haben.
Man kann also ganz einfach Werte in Variablen speichern. Variablennamen bedürfen keiner besonderen Kennzeichnung wie in anderen Sprachen, wie zum Beispiel das Dollarzeichen in Perl:
>>> maximal = 124
>>> breite = 94
>>> print(maximal - breite)
30
>>> 

Mehrzeilige Anweisungen

Bis jetzt haben wir noch nicht über mehrzeilige Anweisungen gesprochen. Anfänger werden hier vielleicht Probleme haben, da noch einige Grundlagen zum Verständnis fehlen, und sollten deshalb besser mit den folgenden Kapitel weitermachen.

Wir demonstrieren, wie die interaktive Shell mit mehrzeiligen Anweisungen, wie zum Beispiel For-Schleifen umgeht.
>>> staedte = ["Freiburg", "Zürich", "Berlin", "Ulm", "München"]
>>> for stadt in staedte:
...     print(stadt)
... 
Freiburg
Zürich
Berlin
Ulm
München
>>> 

Achtung: Nachdem man die Zeile "for stadt in staedte:" eingetippt hat, erwartet die interaktive Shell im Folgenden eingerückte Zeilen. Dies teilt uns die Shell mit einem geänderten Prompt mit: Statt dem gewohnten ">>> " erhalten wir nun eine Folge von drei Punkten "... ". Wir müssen also alle Anweisungen, die mit der Schleife ausgeführt werden sollen um die gleiche Anzahl von Leerzeichen einrücken, mindestens ein Leerzeichen! Wenn wir fertig sind, müssen wir nach der letzten Zeile noch einmal zusätzlich die Eingabetaste drücken.

>>> for n in range(20,40,4):
...     res = n ** 2
...     print(res)
... 
400
576
784
1024
1296
>>> 

Strings - Zeichenketten

Strings sind nichts anderes, als eine sequentielle Abfolge von Zeichen. Um einen String zu definieren, werden Anführungszeichen verwendet. Wurde ein String einmal definiert, kann er zur Laufzeit nicht mehr geändert werden. Dieses Thema behandeln wir in einem anderen Kapitel.
>>> "Hello" + " " + "World"
'Hello World'
Um Strings in mehreren Zeilen zu schreiben, braucht es die dreifachen Anführungszeichen:
>>> stadt = """
... Berlin ist die Hauptstadt
... von Deutschland und ist 
... gleichzeitig auch ein Bundesland.
... """
>>> print(stadt)

Berlin ist die Hauptstadt
von Deutschland und ist 
gleichzeitig auch ein Bundesland.

>>>
Man kann Strings sogar multiplizieren. Dabei passiert nicht anderes, als eine Verkettung der Zeichenkette um den gegebenen Faktor.
>>> ".-." * 4
'.-..-..-..-.'
>>>