Python und die Kommandozeile

Wie ich schon in Unittests für die Kommandozeile kurz beschrieben habe, ist der ArgumentParser aus der Library „argparse“ ein sehr hilfreiches Teil für den Python-Entwickler. Die Klasse analysiert die Kommandozeile und stellt die eingegebenen Parameter als Python-Objekte dar. Dabei wird sowohl eine Überprüfung auf notwendige und erlaubte Argumente durchgeführt, als auch aus den Deklarationen ein Hilfetext generiert, der das übliche Look-And-Feel der Kommandozeile sicherstellt. Der ArgumentParser aus der Library argparse ist ein mächtiges Werkzeug, mit dem der Python-Entwickler recht einfach die Kommandozeilenschnittstelle bedienen kann. Dies ist oft auch bei GUI-Applikationen von Bedeutung, schließlich müssen auch diese irgendwie gestartet werden. JedochHier geht's weiter … Python und die Kommandozeile

Unittests für die Kommandozeile

Unsere Kaffeemaschine wird zwangsläufig über die Kommandozeile aufgerufen. Das wäre selbst dann noch der Fall, wenn wir eine graphische Oberfläche hätten und der Benutzer zum Start auf ein Icon doppelt geklickt hätte. Unter der Haube werkelt halt immer noch die gute alte Konsole. Da ist es nur logisch, auch diesen Aufruf einigen Unittests zu unterziehen. Die Rechtschreibkorrektur schlug als Alternative für das ihr unbekannte „Unittests“ übrigens „Unsitte“ vor 🙂 Weit gefehlt! Es wäre eher eine Unsitte, Unittests nicht durchzuführen. Das Dumme an unserer bisher so eleganten Lösung für die Kommandozeilen-Parameter ist, dass wir so recht gar nicht wissen, wie dieHier geht's weiter … Unittests für die Kommandozeile

Anforderungsmanagement

Die einen ignorieren es, andere wollen es dogmatisch mit tausenden von Dokumenten abgesichert wissen: Anforderungsmanagement. Es ist ein schwieriges Thema, und wie der Volksmund so schön sagt: „Allen Leuten recht getan ist eine Kunst, die niemand kann!“ Einig sind sich viele zumindest darin, dass so etwas nötig ist. „Wer nicht weiß, wo er hin will, braucht sich nicht zu wundern, wenn er ganz woanders ankommt.“ Doch wie viel Aufwand für die Erfassung und Dokumentation der Anforderungen (engl. „requirements“) ist wirklich sinnvoll? Anforderungen sollten … vollständig atomar eindeutig verständlich identifizierbar widerspruchsfrei erfüllbar überprüfbar … sein. Siehe dazu auch den Artikel AnforderungsanalyseHier geht's weiter … Anforderungsmanagement

PyDay: Die listige Python (2)

Letzte Woche beschrieb ich ein Problem, heute nun die Lösung. Oder hast du es bereits selbst herausgefunden? Wir erinnern uns: Es ging um die Sortierung einer Kundenliste nach Umsätzen. Dazu hatte ich eine einfache Klasse entworfen, die den Namen und den aktuellen Umsatz des Kunden enthält. Das Problem war nun, dass Klassenobjekte nicht sortierbar sind, weil deren Reihenfolge nicht definiert ist. Ich dachte zunächst, mir mit einem simplen (aber genialen!) Trick helfen zu können. Ergänze ich die folgende Methode in der Klasse, … def __str__(self): return self._name … dann wird dieses möglich (Zeile 7): kunde1 = Kunde(’Müller‘, 69000) kunde2 =Hier geht's weiter … PyDay: Die listige Python (2)

PyDay: Die listige Python

[adrotate banner=“8″]Inzwischen ist euch sicher bekannt, dass die Programmiersprache Python einige interessante Elemente enthält. Das lässt den Code sehr kompakt und dennoch elegant aussehen. Insbesondere einige eingebaute Funktionen sind dabei extrem hilfreich. In dem nebenstehend verlinkten Buch (Affiliate-Link!) habe ich für den Datentyp „list“ eine solche Funktion gefunden, die das Sortieren einer Liste betrifft, die ich euch gern demonstrieren möchte. Gehen wir beispielhalber zunächst von der normalen Sortierfunktion aus. Dabei gibt es eine nachvollziehbare Voraussetzung: Die Elemente der Liste müssen sortierbar sein! Was im ersten Moment ziemlich trivial klingt, kann bei näherer Betrachtung überraschende Unmöglichkeiten enthalten. In dem Buch erläuternHier geht's weiter … PyDay: Die listige Python

Warten auf Godot — Ausführung asynchron

Nicht zum ersten mal stelle ich fest, dass in Python manche Dinge überraschend einfach sind, sogar das Warten auf Godot eine nebenläufige Tätigkeit. Bei dem Thema „asynchrone Ausführung“ hatte ich vor längerem einen Vortrag auf einer Konferenz zum Thema VB.Net gesehen, was mich auf den Gedanken gebracht hat, es in Python ebenfalls zu suchen. Und siehe da, es geht! Und wie es geht! Nehmen wir an, wir hätten die Funktionen namens „daten_beschaffung“, „gui_aufbau“ und „daten_anzeigen“ geschrieben, die für sich bereits funktionieren. Dummerweise brauchen beide ein wenig Zeit, bis die Arbeit getan ist. Würden wir sie nacheinander an die Arbeit schicken, wäreHier geht's weiter … Warten auf Godot — Ausführung asynchron

PyDay: Kaffee kochen

Nun sind eine Menge Vorbereitungen erledigt und wir haben einiges über das organisatorische Umfeld unseres Projektes gelernt. Jetzt soll es darum gehen, die Kernfunktionalität unserer Kaffeemaschine auszuweiten und vor allem diese mit unserer Kommandozeile in der Routine main() zu verbinden. Dazu werden wir zunächst unsere Klasse Kocher etwas aufbohren und parallel natürlich die zugehörigen Unittests programmieren. Wie bereits zu Beginn erläutert, definiert unsere Kommandozeilenschnittstelle (siehe die Funktion parse_command_line im Modul kaffeemaschine.py) zwei Parameter, die die Menge und die Sorte entgegennehmen. Ferner sind dort bereits Standardwerte hinterlegt, die immer dann greifen, wenn der Gast sich nicht für etwas bestimmtes entschieden hat.Hier geht's weiter … PyDay: Kaffee kochen

PyDay: Refactoring

„Refactoring“ ist nicht nur ein schöner Begriff, es hat tatsächlich einen großen Nutzen. Gemeint ist damit, dass Programmcode „schön“ gemacht wird, ohne seine Funktionalität zu verändern. Es gibt viele Veränderungen, die unter diesem Sammelbegriff gemacht werden können, z.B.: mehrere Codezeilen zu einer Funktion zusammenfassen und dann den Funktionsaufruf anstelle der ursprünglichen Codezeilen einsetzen Variablen, Funktionen oder Dateien umbenennen, um ihren Zweck besser kenntlich zu machen Bei diesen Aktionen kann uns Eclipse mit PyDev entscheidend helfen, denn es bietet einen entsprechenden Menübefehl an: Da das gerade in der vorigen Folge aktivierte PyLint sich über den Namen der Funktion ParseCommandLine beschwert, ändern wirHier geht's weiter … PyDay: Refactoring