Einführung

Ich nutze seit einiger Zeit gerne die kostenlose Entwicklungsumgebung (= IDE = Integrated Development Environment) “Visual Studio Code” von Microsoft. Die Software ist nicht nur für Windows, sondern z. B. auch für Linux und MacOS zu haben.

Download: https://code.visualstudio.com/download

Besonders hilfreich für die tägliche Arbeit sind aber die diversen Erweiterungen (Extensions), die es für alle möglichen Anwendungsfällte gibt. Im folgenden liste ich einige der von mir am häufigsten verwendeten Extensions auf.

Tipp: Man kann die Extensions auch über die den VSCode Marketplace als .vsix Datei herunterladen und offline installieren; falls ihr die auf einem Rechner “braucht, der gerade keine keine Internetverbindung hat.
Der Download-Links ist rechts in der Sidebar unter “Resources” zu finden und heißt “Download Extension”.

Tipps & Tricks

Befehl aufführen:
–> Ctrl-Shift-P

Tastatur-Kürzel anpassen (Customize keyboard shortcuts):
–> Ctrl+K Ctrl+S

Extensions

Allgemeines

  • German Language Pack for Visual Studio Code (Microsoft)
    • Wer die Benutzeroberfläche lieber aus Deutsch mag, kann diese Extension installieren… allerdings ist zu bedenken, dass die meisten Seiten mit Tipps & Tricks zu Visual Studio Code auf Englisch sind und es daher manchmal einfach ist, wenn auch die GUI komplett auf Englisch ist, damit man die entsprechenden Menüs einfacher findet. Geschmackssache.
  • vscode-icons (VSCode Icons Team)
    • Wer in großen Projekten oft mit vielen unterschiedlichen Dateitypen arbeitet, freut sich sicherlich über diese große Sammlung an unterschiedlichen Icons, die es einfacher machen, den Dateityp im VSCode-Explorer zu erkennen.

Python-Entwicklung

  • Python (Microsoft)
    • Ein absolutes Muss für alle Python-Entwickler!

Arbeiten mit CSV-Dateien

  • Rainbow CSV (mechatroner)
    • Färbt die einzelnen Felder/Spalten einer CSV-Datei farblich unterschiedlich ein, so dass man sehr leicht die Werte der einzelnen Spalten auseinanderhalten kann.
  • Edit csv (janisdd)
    • CSV-Editor, mit dem man leicht einzelne Daten verändern, aber auch ganze Zeilen/Spalten hinzufügen/löschen kann. Der Editor unterstützt auch unterschiedliche Lese- und Schreib-Optionen, wie z. B. die Auswahl des Trennzeichens, des Quoting-Stils etc.
  • Excel Viewer (GrapeCity)
    • Zeigt CSV- und Excel-Dateien übersichtlich in Zeilen und Spalten an und ermöglicht auch Sortieren und Filtern.

Übersetzungen

  • gettext (MrOrz)
    • Syntax-Highlighting für gettext-Übersetzungsdateien .po (und .pot, .potx), welches es wesentlich einfacher macht, sich in PO-Files zurechtzufinden.

Allgemein

Tutorials

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

import sys
sys.stdout.write('Text printed without newline')
  • Parsing command line options Parsing command line options
    • optparse (English) @ Python Standard Library Documentation
    • optparse (German) @ Galileo OpenBook
  • 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

Networking

Sprachausgabe

SQLite

Sybase/SAP Databases