Ausführen von Python-Code

Im letzten Kapitel haben wir ein wenig mit einfachen Python-Kommandos in der Python-Shell herumgespielt. Programme werden aber normalerweise nicht interaktiv eingetippt sondern in Dateien gespeichert. Wir werden nun unser erstes "richtiges" Python-Programm schreiben. Wir starten mit dem "obligatorischen" Hallo-Welt-Skript. In der interaktiven Shell sieht es so aus:

 $ python3
Python 3.4.0 (default, Apr 11 2014, 13:05:11) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print("Hallo Welt!")
Hallo Welt!
>>> 
Aber wie wir bereits gesagt haben, wollen wir nun ein "richtiges" Programm schreiben, also in einer Datei. Wir schreiben eine leichte Variation des Hallo-Welt-Themas. Wir wollen den Text "Python lernen" ausgeben. Dazu müssen wir die entsprechende print-Zeile in eine Datei schreiben. Um unsere Datei zu editieren und abzuspeichern, benötigen wir einen Editor. Sowohl unter Linux als auch unter Windows stehen eine Vielzahl von Editoren und Entwicklungsumgebungen zur Entwicklung von Python-Programmen zur Verfügung. Unter Linux kann man beispielsweise den vi, vim, emacs, geany, gedit und eine Vielzahl von weiteren Editoren benutzen. Der emacs steht beispielsweise auch unter Windows zur Verfügung. Als Entwicklungsumgebung eignet sich sowohl unter Linux als auch unter Windows das quelloffene Programm eclipse hervorragend.

Wenn Sie sich also für einen Editor entschieden haben, geben Sie dort bitte die folgende Zeile ein:
print("Python lernen!")
Dann speichern Sie bitte das Mini-Skript unter python_lernen.py.
Die Dateiendung "py" ist unter Linux für die Funktionsweise nicht unbedingt wichtig, solange man das Python-Programm nicht als Modul verwenden will. Die Endung sollte man aber dennoch verwenden, denn dadurch lassen sich Python-Dateien direkt am Namen erkennen. Wie bereits geschrieben, ist die Endung jedoch zwingend notwendig, wenn man die Datei als Modul verwenden will.

Starten eines Python-Skriptes

Nehmen wir an, dass unser Skript in einem Unterverzeichnis "python" des Benutzers monty gespeichert ist, dann kann man es ganz leicht in einer Shell starten: Starten des Python-Skriptes in der Bash mit

Im Folgenden finden Sie die gleiche Eingabesequenz wie im Bild:

monty@python:~$ cd python
monty@python:~/python$ python python_lernen.py 
Python lernen!
monty@python:~/python$

Starten unter Windows

Unter Windows kann man das Programm aus der Eingabeaufforderung heraus starten: (Start -> Alle Programme -> Zubehör -> Eingabeaufforderung):

Starten eines Python-Programmes 
von der Eingabeaufforderung.

Natürlich lässt sich ein Python-Skript oder Python-Programm unter Windows auch in gewohnter Manier durch Doppelklick auf das Icon starten:

Starten eines Python-Scripts unter Windows.

Nach dem Doppelklick wird man jedoch bei unserem Beispiel eine unangenehme Überraschung erleben. Ein Ausgabefenster erscheint zwar, aber nur so kurz, dass man keine Ausgaben lesen kann. Üblicherweise löst man dieses Problem mit einem Trick: Man fügt hinter die letzte Programmzeile eine Eingabeaufforderung ein. Das Kommando "input()" wartet auf eine Eingabe. Das bedeutet, dass man die vorigen Ausgaben solange lesen kann, bis man eine Eingabe eingegeben hat, - also z.B. auch die leere Eingabe - und diese dann durch drücken der Return-Taste bestätigt hat.

Python-Interna

Nun wollen wir die Frage klären, was innerhalb von Python nach dem Start eines Skriptes geschieht. Ruft man das Skript in der Kommandozeile "python python_lernen.py" direkt auf, dann wird das Skript in Bytecode übersetzt und ausgeführt. Diesen Byte-Code bekommt die Anwenderin oder der Anwender nicht zu Gesicht.

Das ändert sich, wenn man in einem anderen Python-Skript oder auch in der Python-Shell dieses Skript mittels dem Kommando "import", also "import python_lernen" importiert. In diesem Fall wird eine in Bytecode übersetzte Version des Python-Programmes abgespeichert. Diese ist nicht mehr so einfach zu finden, wie dies in Python2 der Fall war. Die Datei befindet sich nun in einem Unterverzeichnis "__pycache__". Dort findet man eine Datei mit dem Namen python_lernen.cpython-34.pyc.

Übersetzung des Python-Skripts in Byte-Code
Python 3.4.0 (default, Apr 11 2014, 13:05:11) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import python_lernen
Python lernen!
>>> 
bernd@venus $ ls __pycache__/python_lernen.cpython-34.pyc 
__pycache__/python_lernen.cpython-34.pyc

Bei einem späteren "import" in einem anderen Programmlauf, wird dann direkt die Datei mit dem Byte-Code geladen. Importiert man die gleiche Datei mehrmals im gleichen Skript wird sie nur beim ersten Mal geladen.

Bei dem Byte-Code handelt es sich um einen maschinenunabhängigen Code, der mittels einer virtuellen Maschine (PVM, Python Virtual Machine) ausgeführt wird.


Compiler und Interpreter

Ein Compiler (auch Übersetzer genannt) ist ein Computerprogramm, das ein in einer Quellsprache, wie beispielsweise C oder C++, geschriebenes Programm - Quelle oder Quellprogramm genannt - in ein semantisch äquivalentes Programm (Zielprogramm) einer Zielsprache übersetzt. Üblicherweise handelt es sich dabei um die Übersetzung eines von einem Programmierer in einer Programmiersprache geschriebenen Quelltextes in Assemblersprache, Bytecode oder Maschinensprache. Das Übersetzen eines Quellprogramms in ein Zielprogramm durch einen Compiler wird auch als Kompilierung bezeichnet.


Ein Interpreter ist ein Programm, das einen Quellcode im Gegensatz zu Assemblern oder Compilern nicht direkt in ausführbaren Code, also eine ausführbare Datei, wandelt, sondern den Quellcode einliest, analysiert und ausführt. Die Analyse des Quellcodes erfolgt zur Laufzeit des Programms.


Hilfe

Zu jedem Kommando und jeder Funktion kann man im Python-Interpreter auch interaktiv Hilfe anfordern.

help("print")

Ruft man help() ohne Parameter auf, gelangt man in den Help-Modus. Nun kann man sich mit "modules", "keywords", "symbols" oder "topics" ausführliche Informationen zu den verfügbaren Modulen, Schlüsselwörtern, Symbolen und Themen geben lassen.
help> keywords

Here is a list of the Python keywords.  Enter any keyword to get more help.

False               def                 if                  raise
None                del                 import              return
True                elif                in                  try
and                 else                is                  while
as                  except              lambda              with
assert              finally             nonlocal            yield
break               for                 not                 
class               from                or                  
continue            global              pass                

help>