Seite 1 von 1

INI-Dateien als Haupteinstellungen mit Kommandozeilenparam.

Verfasst: Freitag 8. Juni 2007, 21:00
von gerold
Hallo!

Vielleicht bringt es irgendjemandem ja etwas. Ich verwende schon seit einiger Zeit INI-Dateien für die Haupteinstellungen meiner Programme. Den Codeausschnitt, der demonstriert wie ich darauf zugreife, habe ich mal aus einem der Programme heraus gelöst.

Features:
- INI-Datei muss nicht existieren
- Einstellungen als Dictionary mit Standardwerten
- Standardeinstellungen werden durch Einstellungen in den INI-Dateien überschrieben.
- Die INI-Dateien können über die Kommandozeile angegeben werden.
- Neue INI-Dateien überschreiben alte INI-Dateien
- Jede Einstellung kann auch über die Kommandozeile übergeben werden.
- Kommandozeilenargumente überschreiben INI-Einstellungen

Code ausgelagert --> http://paste.pocoo.org/show/87204/

Die zugehörige INI-Datei könnte z.B. so aussehen:

Code: Alles auswählen

# hallo.ini

[GLOBAL]
DEBUG = True

[CONNECTION]
USE_THREADS = True
mfg
Gerold
:-)


Suchworte: optparse configParser Settings Einstellungen INI DEBUG Parser sys.argv Options Args

Verfasst: Donnerstag 26. Juli 2007, 13:16
von cyp++
ConfigObj?

Verfasst: Donnerstag 26. Juli 2007, 19:51
von lunar
ConfigObj ersetzt nur ConfigParser, Kommandozeilenoptionen z.B. unterstützt es nicht.

Verbesserungsvorschläge

Verfasst: Montag 6. Oktober 2008, 11:46
von fbuchinger
Sehr interessantes Beispiel, aber IMHO gibt es zwei essentielle Verbesserungsmöglichkeiten:

Die Konfiguration des OptionParsers sollte nicht in der Settings-Klasse erfolgen, sonst ist diese ja nicht mehr modular (d.h. in unterschiedlichen Python-Apps) einsetzbar.

Die self._settings-Liste ist IMHO überflüssig, den die möglichen Optionen mit ihren Datentypen etc. werden ohnehin schon im OptionParser definiert. Eine zweite Definition in Listenform (also ohne Keys) macht das ganze fehleranfällig.

Bin schon gespannt auf eine verbesserte Version!

Re: Verbesserungsvorschläge

Verfasst: Montag 6. Oktober 2008, 12:12
von gerold
Hallo fbuchinger!
fbuchinger hat geschrieben:zwei essentielle Verbesserungsmöglichkeiten
Danke für die Verbesserungsvorschläge, aber ist "essentielle" nicht doch etwas übertrieben. ;-) :D
fbuchinger hat geschrieben:Die Konfiguration des OptionParsers sollte nicht in der Settings-Klasse erfolgen, sonst ist diese ja nicht mehr modular (d.h. in unterschiedlichen Python-Apps) einsetzbar.
Dafür war sie nie gedacht. Diese Klasse war dafür gedacht, direkt im Programm verwendet zu werden.
fbuchinger hat geschrieben:Die self._settings-Liste ist IMHO überflüssig, den die möglichen Optionen mit ihren Datentypen etc. werden ohnehin schon im OptionParser definiert.
Es gibt Einstellungen/Konfigurationen, die in einer INI-Datei nichts zu suchen haben. Und genau so gibt es Einstellungen/Konfigurationen, die als Kommandozeilenparameter nicht viel Sinn ergeben. Deshalb habe ich mich nie darum bemüht, beides gemeinsam zu konfigurieren.
fbuchinger hat geschrieben:Bin schon gespannt auf eine verbesserte Version!
Leider! Es wird nie eine verbesserte Version geben. Wie ich schon schrieb, war dieser Code nicht dafür gedacht, in einem programmunabhängigen Modul zu stehen. Ich wollte nur Aufzeigen, dass man INI und Kommandozeilenparameter verbinden kann.

mfg
Gerold
:-)