Python Open Source Software wird gegenüber kommerziellen Lösungen immer wichtiger. Addison-Wesley trägt dieser Entwicklung Rechnung mit den Büchern der Open Source Library. Administratoren, Entwickler und User erhalten hier professionelles Know-how, um freie Software effizient einzusetzen. Behandelt werden sowohl Themen wie Betriebssysteme, Netzwerke und Sicherheit als auch Programmierung. Eine Auswahl aus unserem Programm: Hibernate hat sich innerhalb kurzer Zeit zum De-Facto-Standard unter den Object-Relational-Mappern (OR-Mapper) entwickelt. Die mit Hibernate entwickelten Konzepte und deren gelungene Umsetzung haben maßgeblich das Java Persistence API innerhalb EJB 3.0 bestimmt. Es ist nun erstmals möglich, sowohl in Java SE als auch Java EE mit denselben Persistenzmechanismen zu arbeiten. Die Autoren führen anhand eines praxisnahen Beispiels in die Konzepte des OR-Mappings und deren Umsetzung mithilfe von Hibernate ein. Anfänger werden mithilfe von zunächst einfachen Beispielen an die Thematik herangeführt. Mit zunehmender Komplexität der Beispiele werden auch erfahrene Software-Entwickler eine Reihe neuer Informationen aus dem Bereich der ObjektPersistenz mitnehmen können. Die Integration von Hibernate in komplexe Anwendungen, insbesondere solche mit web-basierten Architekturen, sowie die Darstellung der neuesten Entwicklungen in diesem Bereich runden das Buch ab. Java-Persistence-API mit Hibernate Bernd Müller, Harald Wehr 360 S. Euro 39,95 (D), 41,10 (A) ISBN 978-3-8273-2537-2 Python ist eine moderne, interpretierte, interaktive und objektorientierte Skriptsprache, die sowohl unter Unix (inklusive Linux) als auch Windows einsetzbar und für die meisten gängigen Betriebssysteme frei erhältlich ist. In diesem Video-Training erläutert Ihnen der Trainer die Grundlagen der Skriptsprache Python und geht schrittweise auf die Stärken der Sprache ein. Auf diese Weise werden insbesondere Programmierer und Systemadministratoren angesprochen. Im Anschluss daran wird die eigentliche Funktionsweise der Programmiersprache erklärt. Python Peter Walerowski Euro 49,95 (D), 51,40 (A) ISBN 978-3-8273-6080-9 Peter Walerowski Grundlagen und Praxis An imprint of Pearson Education München • Boston • San Francisco • Harlow, England Don Mills, Ontario • Sydney • Mexico City Madrid • Amsterdam Die Deutsche Bibliothek – CIP-Einheitsaufnahme Die Deutsche Bibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.ddb.de abrufbar. Die Informationen in diesem Produkt werden ohne Rücksicht auf einen eventuellen Patentschutz veröffentlicht. Warennamen werden ohne Gewährleistung der freien Verwendbarkeit benutzt. Bei der Zusammenstellung von Texten und Abbildungen wurde mit größter Sorgfalt vorgegangen. Trotzdem können Fehler nicht vollständig ausgeschlossen werden. Verlag, Herausgeber und Autoren können für fehlerhafte Angaben und deren Folgen weder eine juristische Verantwortung noch irgendeine Haftung übernehmen. Für Verbesserungsvorschläge und Hinweise auf Fehler sind Verlag und Herausgeber dankbar. Alle Rechte vorbehalten, auch die der fotomechanischen Wiedergabe und der Speicherung in elektronischen Medien. Die gewerbliche Nutzung der in diesem Produkt gezeigten Modelle und Arbeiten ist nicht zulässig. Fast alle Hardware- und Softwarebezeichnungen und weitere Stichworte und sonstige Angaben, die in diesem Buch verwendet werden, sind als eingetragene Marken geschützt. Da es nicht möglich ist, in allen Fällen zeitnah zu ermitteln, ob ein Markenschutz besteht, wird das ® Symbol in diesem Buch nicht verwendet. Umwelthinweis: Dieses Produkt wurde auf chlorfrei gebleichtem Papier gedruckt. Um Rohstoffe zu sparen, haben wir auf Folienverpackung verzichtet. 10 9 8 7 6 5 4 3 2 1 09 08 ISBN 978-3-8273-2517-4 © 2008 by Addison-Wesley Verlag, ein Imprint der Pearson Education Deutschland GmbH Martin-Kollar-Straße 10–12, D-81829 München/Germany Alle Rechte vorbehalten Einbandgestaltung: Marco Lindenbeck, webwo GmbH ([email protected]) Lektorat: Brigitte Alexandra Bauer-Schiewek, [email protected] Korrektorat: Petra Kienle Fachlektorat: Daniel Koch Herstellung: Monika Weiher, [email protected] Satz: Reemers Publishing Services GmbH, Krefeld (www.reemers.de) Druck: Bercker Graph. Betrieb, Kevelaer Printed in Germany Inhaltsübersicht Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1 Den Rechner für die Arbeit mit Python einrichten . . . . . . . . . . . . . . . . . . . . . . 17 2 Skripte schreiben und ausführen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3 Die Struktur von Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4 Klassen entwickeln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 5 Arbeiten mit Zeichenketten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Dateien auslesen und schreiben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 7 Arbeiten mit dem Laufzeit- und dem Betriebssystem . . . . . . . . . . . . . . . . . . . 157 8 Grafische Benutzeroberflächen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 9 Webentwicklung mit Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 10 Bildbearbeitung mit der Python Imaging Library . . . . . . . . . . . . . . . . . . . . . . 127 271 A Eingebaute Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 B Built-in Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 C Link-Verzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 D Webhoster mit mod_python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 Stichwortverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 Inhaltsverzeichnis 1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Den Rechner für die Arbeit mit Python einrichten . . . . . . . . . . . . . . . . . . . . . . 17 1.1 Python installieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 1.1.1 Installation unter Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 1.1.2 Installation unter Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 1.2 Python interaktiv verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.3 Python IDLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 1.3.1 Grundlegende Funktionsweise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.2 Class Browser und Path Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 1.3.3 Der Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 1.3.4 Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 1.4 Python mit Eclipse entwickeln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 26 1.4.1 Eclipse und PyDev installieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 1.4.2 Eclipse und PyDev einrichten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 1.4.3 Die Oberfläche von PyDev . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 1.4.4 Debugging in Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Skripte schreiben und ausführen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 2.1 Syntaxregeln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 2.1.1 Zeilennotation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 2.1.2 Anweisungsblöcke durch Einrückung . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 2.1.3 Kommentare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.1.4 Regeln für Namen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Skripte ausführen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 20 38 40 2.2.1 Unter Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 2.2.2 Unter Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Die Struktur von Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 3.1 Daten sind Objekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 3.2 Datentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 3.2.1 Zahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 3.2.2 Sequenzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3.2.3 Arbeiten mit Sequenzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 3.2.4 Assoziative Felder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Inhaltsverzeichnis 4 3.2.5 Arbeiten mit Dictionarys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 3.2.6 Mengen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 3.2.7 Spezielle Typen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 3.2.8 Typenwandlung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 3.3 Flache und tiefe Kopien von Listen und Dictionarys . . . . . . . . . . . . . . . 67 3.4 Kontrollfluss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 3.4.1 Bedingte Anweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 3.4.2 Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 3.4.3 Schleifen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 3.5 Ausnahmen behandeln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 3.5.1 Ausnahmen abfangen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 3.5.2 Vor dem Abbruch aufräumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 3.6 Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 3.6.1 Funktionsaufrufe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 3.6.2 Funktionen definieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 3.6.3 Namensräume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 3.6.4 Parameter und ihre Übergabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 3.6.5 Lokale Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 3.6.6 Rekursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 3.6.7 Lambda-Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 3.6.8 Docstrings und kommentierte Parameter . . . . . . . . . . . . . . . . . . . . . . . 99 Klassen entwickeln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 4.1 Die Klasse als Bauplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 4.2 Eine Klasse definieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 4.3 Eine Klasse aufrufen: Objekte bilden . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 4.4 Ein genauer Blick auf Klassenattribute . . . . . . . . . . . . . . . . . . . . . . . . . . 108 4.5 Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5.1 110 Statische Methoden und Klassenmethoden . . . . . . . . . . . . . . . . . . . . . 113 4.6 Zugriffe steuern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 4.7 Polymorphie – Operatoren überladen . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 4.8 Vererbung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 4.9 Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 4.9.1 8 Suchpfade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 Inhaltsverzeichnis 5 Arbeiten mit Zeichenketten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 5.1 Die Methoden des String-Objekts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 Groß- und Kleinschreibung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zeichenketten überprüfen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Suchen und Ersetzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bereinigen und Auffüllen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zerlegen und Zusammensetzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Kodieren und Decodieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 128 129 130 131 132 5.2 Variable Zeichenketten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 5.3 Das Modul string . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 5.4 Das Modul textwrap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 5.5 Reguläre Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 5.5.1 6 Das Modul re . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 Dateien auslesen und schreiben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 6.1 Dateien anlegen und öffnen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 6.2 Methoden zum Schreiben, Lesen, Speichern . . . . . . . . . . . . . . . . . . . . . 145 6.3 Die Cursorposition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 6.4 Praxis: einen Serienbrief erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 6.5 Beliebige Datentypen speichern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 6.6 Praxis: Adressdaten abspeichern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 6.7 String-Objekt als Zwischenspeicher . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 7 Arbeiten mit dem Laufzeit- und dem Betriebssystem . . . . . . . . . . . . . . . . . . . 157 7.1 Das Modul sys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 7.1.1 7.1.2 Argumente für Skripte, Skripte beenden . . . . . . . . . . . . . . . . . . . . . . . . . 159 Standardein- und -ausgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 7.2 Das Modul os . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.1 7.2.2 7.2.3 7.2.4 7.2.5 8 Konstanten für die Dateinamenverwaltung . . . . . . . . . . . . . . . . . . . . . . . Orientieren und prüfen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Anlegen, ändern, löschen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Datei- und Verzeichnisattribute auslesen . . . . . . . . . . . . . . . . . . . . . . . . Verzeichnisbäume durchlaufen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Grafische Benutzeroberflächen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 162 163 165 167 171 175 8.1 Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 8.2 Oberflächenelemente: Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 8.2.1 8.2.2 Allgemeine Widget-Optionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 Allgemeine Widget-Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 9 Inhaltsverzeichnis 8.3 Die einzelnen Widget-Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 8.3.1 Tk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 8.3.2 Button . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 8.3.3 Checkbutton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 8.3.4 Entry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 8.3.5 Label . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 8.3.6 Listbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 8.3.7 Menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 8.3.8 Menubutton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 8.3.9 Message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 8.3.10 OptionMenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 8.3.11 PhotoImage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 8.3.12 Radiobutton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 8.3.13 Scale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 8.3.14 Scrollbar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 8.3.15 Spinbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 8.3.16 Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 8.3.17 Frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 8.3.18 LabelFrame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 8.3.19 PanedWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 8.3.20 Toplevel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 8.4 Layoutmanager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 8.4.1 Die Methode pack() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.4.2 Die Methode grid() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 219 8.4.3 Die Methode place() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 8.4.4 Weitere Layoutmethoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 8.5 Praxis: Oberfläche für Serienbriefprogramm . . . . . . . . . . . . . . . . . . . . . 227 10 8.5.1 Der Grundaufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 8.5.2 Das Menü . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 8.5.3 Die Musterbriefoberfläche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.5.4 Die Adresseingabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 231 8.5.5 Wechsel zwischen den Ansichten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 8.5.6 Funktionen der Musterbriefansicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 8.5.7 Funktionen der Adressenansicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 8.5.8 Generierung der Serienbriefe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 Inhaltsverzeichnis 9 Webentwicklung mit Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 9.1 CGI-Skripte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 9.1.1 Aufbau eines CGI-Skripts mit Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 9.1.2 Inhalte dynamisch einfügen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 9.1.3 Den Datenspeicher bedienen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 9.1.4 Reine Skriptverarbeitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 9.1.5 Fehlerbehandlung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 9.2 Python Server Pages mit mod_python . . . . . . . . . . . . . . . . . . . . . . . . . . 253 9.2.1 Installation und Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 9.2.2 Sicherheitsaspekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 9.2.3 PSP-Schreibweisen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 9.2.4 Daten auslesen und Formulardaten speichern . . . . . . . . . . . . . . . . . . . . 258 9.2.5 PSP als Template-Sprache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 9.3 Anbindung an relationale Datenbanken . . . . . . . . . . . . . . . . . . . . . . . . . 266 9.3.1 Eine Datenbankverbindung aufbauen und Daten auslesen . . . . . . . . . 267 9.3.2 Die Webanwendung mit der Datenbank verbinden . . . . . . . . . . . . . . . . 269 10 Bildbearbeitung mit der Python Imaging Library . . . . . . . . . . . . . . . . . . . . . . 271 10.1 Bilddateien erzeugen, öffnen, speichern und anzeigen . . . . . . . . . . . . 272 10.2 Bildattribute auslesen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 10.3 Maße ändern, drehen, Kopien und Ausschnitte erzeugen . . . . . . . . . . 276 10.3.1 Vorschaubilder erzeugen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 10.3.2 Bilder drehen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 10.3.3 Bildteile kopieren und einfügen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 10.4 Kanäle und Masken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 10.4.1 Masken verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 10.5 Zeichnen und Zeichen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 10.5.1 Text ins Bild einfügen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 10.6 Ein Captcha erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 A Eingebaute Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 B Built-in Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 C Link-Verzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 D Webhoster mit mod_python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 Stichwortverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 11 Einleitung Python-Programme kann man lesen! Klingt seltsam, trifft aber einen der wesentlichen Pluspunkte dieser Sprache ziemlich genau. Es gibt sicherlich guten und es gibt schlechten Programmierstil. Hat man einen Quelltext vor sich, den man nicht selbst geschrieben hat, wird man, auch wenn er in gutem Stil geschrieben ist, nicht mit den Kommentaren allein auskommen, um ihn zu verstehen. In vielen Fällen ist es notwendig, die Programmzeilen und Anweisungsblöcke selbst zu lesen. Die meisten Sprachen machen es einem da nicht leicht. Seien es die Namen von Standardfunktionen oder eine Flut von Klammern und anderen Zeichen, die die Dateien füllen – man muss den Quelltext selbst lesen und braucht oft enorm viel Zeit, um die Strukturen zu durchschauen. Python-Quelltexte erfreuen sich dagegen einer bestechenden Schlichtheit, die es einem ermöglicht, sehr schnell und direkt die Programmstruktur zu entschlüsseln. Das liegt an Pythons Syntax, die ohne Klammern für Befehlsblöcke auskommt, keine Anweisungsendzeichen verlangt und immer dort Einrückungen hat, wo sie wirklich verlangt sind. Und das ist keinesfalls übertrieben, denn die Einrückungen machen den Befehlsblock deutlich und sind damit notwendig, um ein lauffähiges Skript zu schreiben. Das liegt aber auch daran, dass man mit Python für eine Funktionalität meistens deutlich weniger Quelltext braucht als in anderen Sprachen. Wo andere zehn Zeilen benötigen, braucht Python nur fünf oder nur drei. Python ist eher minimalistisch. Die Zahl der reservierten Wörter ist gering, was den Leistungsumfang aber keineswegs schmälert. Vielmehr sind die Basissprachkonstrukte auf das Notwendigste reduziert. Wenn man häufig mit verschiedenen Sprachen umgehen muss, ist man immer wieder verblüfft, wie einfach und klar sich in Python so manches regeln lässt, und fragt sich, warum andere nicht schon längst darauf gekommen sind. Aber bei allem Lob, es geht um ein wenig mehr: Wenn man eine Sprache schneller erfassen kann als andere und wenn man mit dieser Sprache vergleichsweise weniger Aufwand für das gleiche Ergebnis hat, erreicht man in kürzerer Zeit das gesteckte Ziel. Wenn daneben andere meinen Code schnell verstehen können und ich den von anderen, dann wird die Arbeit im Team dadurch effizienter. Und hier werden Pythons Vorteile zu echten Kostenvorteilen. Einleitung Es ist wie mit einem guten Werkzeug: Es ist sicherlich teurer in der Anschaffung, aber die Arbeit gelingt damit besser, so dass sich die Investition schnell amortisiert. Aber der Vergleich hinkt. Python ist in der Anschaffung nicht teurer als andere. Es ist eine frei verfügbare Sprache. Die genannten Vorzüge von Python haben die Sprache auch zu einer der beliebtesten Sprachen unter Informatiklehrern gemacht. Die Einstiegshürde ist gering und man erzielt schnell Ergebnisse. So lässt sich wilden Kids das Programmieren leichter beibringen. Ganz nebenbei gehen die Schüler dann auch noch mit einer Sprache um, die konsequent objektorientiert ist. Alle Datentypen sind Objekte und selbst wenn man nur prozedural programmiert, man arbeitet eigentlich doch immer mit Objekten. Python schafft auf diese Weise etwas, was kaum eine andere Sprache erreicht: Programmieren wird für Personenkreise zugänglich, denen dieses Feld sonst zu komplex war. Davon profitieren auch die anderen Sprachen, denn wer erst einmal Gefallen an der Programmierung durch und mit Python gefunden hat, wird sich auch andere Sprachen früher oder später einmal anschauen. Man darf und sollte bei aller Simplizität, die Python mitbringt, aber nicht glauben, dass diese Sprache ein Spielzeug wäre. Schaut man sich einmal an, wer Python einsetzt und welche Software auf Python basiert, wird man schnell sehen, dass man es mit einem effizienten und professionellen Werkzeug zu tun hat. Die Python-Webseite gibt hier einen beeindruckenden Überblick (http://www.python.org/about/success/). Aber es wird auch in weniger sichtbaren Bereichen eingesetzt. In der Steuerung von Linux-Rechnern mit Shell-Skripten steht Python heute gleichberechtigt neben Perl. Die sehr erfolgreiche Ubuntu-Distribution nimmt hier eine Vorreiterrolle ein. Python wird sehr viel im wissenschaftlichen Bereich eingesetzt, um spezielle Programme für die Auswertung von Forschungsdaten zu entwickeln. Eine unbekannte Zahl von Websites nutzen die unterschiedlichen python-basierten Webframeworks wie Django, Turbo Gears oder Zope, – um nur die großen zu nennen. (Im Anhang finden sich Links zu weiteren Frameworks.) Und nicht zuletzt verwendet Google für seine vielfältigen Applikationen und Dienste bevorzugt Python. Der Python-Schöpfer Guido von Rossum arbeit derzeit übrigens für Google. Dieses Buch behandelt deshalb auch ein weites Spektrum der Einsatzmöglichkeiten von Python. Nach einer grundlegenden Einführung in die Sprache wird gezeigt, wie man Texte verarbeitet und mit Dateien und dem Dateisystem umgeht. Es wird die Entwicklung eigener Klassen dargelegt und das Erstellen von grafischen Benutzeroberflächen erläutert. Ein Kapitel widmet sich der Be- und Verarbeitung von Bilddateien und nicht zuletzt wird das Programmieren für das Internet mit Python beschrieben. Eine Reihe von praktischen Beispielen zeigen die genauen Vorgehensweisen. Diese Beispiele und jegliche Software, die zum Durcharbeiten notwendig ist, finden sich auf der beiliegenden CD. Sie können also direkt loslegen und selbst erfahren, dass es einfach Spaß macht, mit Python zu arbeiten. 14 Einleitung Mein Dank Es gibt eine große Menge an Wissen in der Python-Community, von dem ich profitiert habe und weiterhin profitiere. Dieses Buch ist auch Ausdruck meines Danks an die Community, der ich damit etwas zurückgeben möchte. Ferner geht mein Dank an Andreas Herold für die Korrekturen und das Hineinschlüpfen in die Rolle des Lesers sowie an Manuel Herzog für die Erstellung astreiner Grafiken. Für die kritischen und konstruktiven Kommentare danke ich Daniel Koch. Das Buch hat davon deutlich profitiert. Und nicht zuletzt will ich denen danken, die mir während der Arbeit an diesem Buch den Rücken freigehalten haben und mich leider viel zu selten gesehen haben. 15 1 1.1 Den Rechner für die Arbeit mit Python einrichten Python installieren Bei einem Linux-Rechner kann man je nach Distribution das Glück haben, bereits mit Python arbeiten zu können. Wie Perl gehört es in der Linux-Welt vielfach zur Grundausstattung des Rechners, so z. B. bei Debian und Ubuntu. Und auch Macintosh-Rechner mit MacOS X haben Python bereits installiert (wenn auch meistens nicht in der aktuellsten Version). Aber die Nutzer anderer Betriebssysteme können beruhigt sein – die Zeit, die die Installation von Python benötigt, reicht für eine Kaffeepause nicht aus. Für jede Plattform findet man die entsprechende Python-Version unter http://www. python.org/download/. Wer eine Installation aus den Quellen bevorzugt, kann einen der beiden zur Verfügung stehenden Tarballs herunterladen. Unter Linux kann natürlich auch die Paketverwaltung der jeweiligen Distribution verwendet werden, um Python zu installieren. Allerdings dauert es mitunter eine Weile, bis die aktuellste Version in die Distribution aufgenommen wird. Für die Windows-Plattform bietet die Download-Seite Installationsprogramme an. Es gibt jeweils eines für Rechner mit x86-Prozessoren sowie für 64-Bit-Architekturen von AMD und Intel (Itanium). Schließlich kann auch für MacOS X ein Installer heruntergeladen werden, der sowohl für PPC- als auch Intel-Macs Verwendung findet. Mit ihm lässt sich Python auf dem MacOS auf den aktuellsten Stand bringen. Es sind hier aber die Systemvoraussetzungen zu beachten (siehe http://www.python.org/download /mac/). Python 2.5 benötigt wenigstens die MacOS X Version 10.3. Neben den bereits genannten Plattformen unterstützt Python noch viele weitere Plattformen wie z. B. BeOs, Solaris, AIX oder HP-UX. Auf diesen Plattformen ist eine Installation aus den Quellen anzuraten. Die kanadische Firma ActiveState bietet spezielle Versionen für einige dieser Plattformen an (http://aspn.activestate.com/ASPN/ Downloads/ActivePython). Diese stehen aber nicht unter einer Open-Source-Lizenz. Wer eine (eventuell auch ältere) Version für eine spezielle Plattform benötigt, wird auf der Internetseite http://www.python.org/download/other/ wahrscheinlich fündig. Von Nokia S60 über Psion und Playstation bis MorphOS sind hier einige Plattformen aufgelistet.