Python
Allgemein
Tutorials
- Python Programming Language (Official Website)
- Das Python3.3-Tutorial (auf Deutsch)
- Python 2.5 – Das umfassende Handbuch @ Galileo OpenBook (Peter Kaiser, Johannes Ernesti)
- Interactive Python tutorial @ LearnPython.org
- How can you profile a Python script? @ stackoverflow
Install Python modules on Windows
Example for module screeninfo
, but it works as well for e.g. matplotlib
, pandas
etc.
C:\Users\Stefan> cd \Software\Python27 # or: Python34 or similar C:\Software\Python27> python.exe -m pip install screeninfo Collecting screeninfo Downloading screeninfo-0.2.1.tar.gz Installing collected packages: screeninfo Running setup.py install for screeninfo ... done Successfully installed screeninfo-0.2.1
Python Kochbuch
Miscellaneous
- How to print in Python without newline or space? @ stackoverflow
import sys sys.stdout.write('Text printed without newline')
- Parsing command line options Parsing command line options
- screeninfo
- Fetch location and size of physical screens; system-independent for Windows (nativ & cygwin) and Linux.
- Install:
pip install screeninfo
atexit – Befehle ausführen bei Programmende
Häufig kommt es vor, dass man irgendwelche Aktionen startet (z. B. schreiben temporärer Dateien, öffnen einer Datenbanken etc.), die auf jeden Fall vor Beendigung des Programms noch beendet werden sollten/müssen (z. B. temporäre Dateien löschen, Datenbank schließen oder im Speicher befindliche Daten persistieren).
Bei komplexeren Programmen und in Fehlerfällen gibt es meist an verschiedensten Stellen im Programm Ausstiegspunkte; und nicht nur am Ende von main(), so dass man an jeder einzelnen Stelle dran denken muss, vorher noch einen cleanup auszuführen. Das ist lästig und fehleranfällig, weil es leicht vergessen wird.
Einfacher geht das über das Modul atexit
, wie das folgende Beispiel zeigt:
#!/usr/bin/python # -*- coding: UTF-8 -*- import sys import atexit def exitHandler(): print "Cleaning temporary files..." # delete temporary files # write last message to log # ... atexit.register(exitHandler) sys.exit(0)
Output:
Cleaning temporary files...
Man muss also nie wieder irgendwo explizit eine Cleanup-Funktion aufrufen, da der exitHandler()
immer automatisch ausgeführt wird.
signal – Signale abfangen und verarbeiten
Genauso wie bei atexit
(siehe oben), sollte auch beim Abbruch eines Programms durch den User
(z. B. durch Drücken von “Ctrl-C” oder Ausführen von “kill”) am Ende
immer noch alles sauber aufgeräumt werden (DB-Verbindungen schließen,
temporäre Files löschen, Daten persistieren etc.).
Dazu muss man die entsprechenden Signale abfangen, was einfach über das Modul signal
geht:
#!/usr/bin/python # -*- coding: UTF-8 -*- import time import sys import signal def signalHandler(signum, frame): # Klartextnamen für Signal-Nummern ermitteln. SIGNALS_TO_NAMES_DICT = dict((getattr(signal, n), n) \ for n in dir(signal) if n.startswith('SIG') and '_' not in n ) signame = SIGNALS_TO_NAMES_DICT.get(signum, "Unnamed signal: %d" % signum) # Bei bestimmten Signalen Programm beenden, # bei anderen nur Empfang melden. if signum in (signal.SIGINT, signal.SIGTERM): exitCode = 1 print "\nSignal '%s' (%d) received. => Aborting with exit code %d.") % (signame, signum, exitCode) sys.exit(exitCode) else: print "Signal %d received and ignored." % signum signal.signal(signal.SIGINT, signalHandler) signal.signal(signal.SIGTERM, signalHandler) signal.signal(signal.SIGHUP, signalHandler) print "Waiting... (press Ctrl-C to terminate)" time.sleep(10) sys.exit(0)
Output (mit Drücken von Ctrl-C innerhalb von 10 Sekunden):
Waiting... (press Ctrl-C to terminate)
^C
Signal 'SIGINT' (2) received. => Aborting with exit code 1.
Natürlich lassen sich Signale wie SIGHUP
, SIGUSR1
oder SIGUSR2
o.ä. auch gut nutzen, um Aktionen wie ein Reread der Config oder das Wegschreiben von Statusinformationen zu triggern.
Da das Aufräumen am Ende eines Programms zum guten Programmierstil gehört, sollte die Verwendung von Signal-Handlern für jedes nicht-triviale python-Programm verpflichtend sein.
Spezielle Themen
XML
- How do I parse XML in python? @ stackoverflow
- Python XML Processing @ tutorialspoint
- XML Processing Modules @ Python Docs
- xml.etree.ElementTree — The ElementTree XML API @ Python Docs
- xml.dom.minidom — Minimal DOM implementation @ Python Docs
Networking
- What is the quickest way to HTTP GET in Python? @ stackoverflow
- HOWTO Fetch Internet Resources Using urllib2 @ Python Docs
- urllib — Open arbitrary resources by URL @ Python Docs
- httplib — HTTP protocol client @ Python Docs
Sprachausgabe
- Setting up Python pyttsx in Windows (Text to Speech)
- pyttsx – Text-to-speech x-platform (Official Documentation
- How to make Python speak @ stackoverflow
SQLite
- Python – Arbeiten mit Datenbanken am Beispiel sqlite @ RRZN
- sqlite3 — DB-API 2.0 interface for SQLite databases @ Python Docs
Sybase/SAP Databases
- Adaptive Server Enterprise Extension Module for Python @ SyBooks Online