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" und inter bezeichnet die zeitliche und örtliche Position zu Dingen und Ereignissen, also "zwischen" zwei oder "inmitten" (oder "unter") vielen Objekten, Personen oder Ereignissen sein. Aso heisst "inter agere" 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 allgemeine eine Hülle oder Schutzhülle. "Shell" bezeichnet auch ein Schneckenhaus und das Gehäuse, das eine Muschel umschliesst. Ebenso liegt eine Shell auch zwischen einem Betriebssystem und dem Beutzer. 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 es 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, 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 oben beschrieben, 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 überlicherweile 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.6.5 (r265:79063, Apr 16 2010, 13:57:41) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
Wenn man genauer auf die obige Ausgabe schaut, das heißt auf die Vesionsnummer, erkennt man ein Problem. Wir wollten uns ja mit Python 3 beschäftigen, aber Python 2.6.5 ist installiert. Diese Situation ergibt sich beispielsweise bei einer Ubuntu 10.10 Distribution. In diesem Fall muss man Python nachinstallieren und anschließend mit python3 den interaktiven Interpreter starten:
$ python3.1
Python 3.1.2 (r312:79147, Sep 27 2010, 09:57:50) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

Der Interpreter steht nun mit dem sogenannten Eingabeprompt (>>>) für Eingaben bereit. Man kann jetzt beliebigen Python-Code eingegeben, der nach dem Quittieren mit der Eingabetaste (Return-Tate) 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. Man wollte damit den Charakter von print als Funktion betonen.

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 "gedruckt"
>>> "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. 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)
85
>>> 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 weiter zu lesen. Das folgende Beispiel wendet sich an Benutzer, die bereits ein wenig Erfahrung mit Programmierung haben.
Man kann also ganz einfach Werte in Variablen speichern. Variablenname 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 jezt haben wir noch nicht über mehrzeilige Anweisungen gesprochen. Anfänger werden hier vielleicht Probleme haben, da noch einige Grundlagen zum Verständins 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.
>>> l = ["A",42,78,"Just a String"]
>>> for character in l:
...     print(character)
... 
A
42
78
Just a String
>>> 

Achtung: Nachdem man die die Zeile "for character in l:" eingetippt hat, wartet die interaktive Shell im folgenden auf eingerückte Zeilen. Dies teilt uns die Shell mit einem neuen Promt 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.