INI-Dateien als Haupteinstellungen mit Kommandozeilenparam.

Code-Stücke können hier veröffentlicht werden.
Antworten
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 8. Juni 2007, 21:00

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
Zuletzt geändert von gerold am Montag 6. Oktober 2008, 12:02, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
cyp++
User
Beiträge: 69
Registriert: Freitag 22. September 2006, 13:54

Donnerstag 26. Juli 2007, 13:16

ConfigObj?
lunar

Donnerstag 26. Juli 2007, 19:51

ConfigObj ersetzt nur ConfigParser, Kommandozeilenoptionen z.B. unterstützt es nicht.
fbuchinger
User
Beiträge: 29
Registriert: Donnerstag 7. September 2006, 21:30

Montag 6. Oktober 2008, 11:46

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!
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 6. Oktober 2008, 12:12

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten