PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ConfigParser.py



Hans-Georg Normann
04-10-2002, 18:40
Fehlermeldung:
File "/usr/lib/python2.1/ConfigParser.py", Line 277 in get
d = self.__defaults.copy()
AtrtributeError: copy

Dieser Fehler erreicht mich, wenn ich die Methode ConfigParser.get('BlaBla','StringValue') anwende. Bei ConfigParser.getint() passiert das gleiche.

Bei Suse (7.3) finde ich keinen aktuellere als die eingespielte Python Version (2.1.1-78). Hat jemand eine Idee oder noch besser ne funktionierende Lösung?

Hans

anda_skoa
04-10-2002, 18:53
Ich kenn mich mit Python nicht so gut aus.
Könntest du den Aufruf der Methode posten?

Ciao,
_

Hans-Georg Normann
04-10-2002, 18:59
!/usr/bin/python
#(C) 2002 by H. G. Normann
#
# NorConfig

import os
import sys
import ConfigParser
from TNorConfigGui import TNorConfig
from qt import *

class Tutor(TNorConfig):

def __init__(self, parent=None, name=None, fl=0):
TNorConfig.__init__(self,parent,name,fl)

def On_btCloseClick(self):
Application.quit()

def On_btReadClick(self):
config = ConfigParser.ConfigParser(self)
config.read('NorConfig.ini')
######### hier gibts den Fehler ######################
s = str(config.get('DubiDu', 'Message'))
#############################################
edValue.setText(s)

if __name__ == '__main__':
Application = QApplication(sys.argv)
QObject.connect(Application,SIGNAL('lastWindowClos ed()'),Application,SLOT('quit()'))
MainWindow = Tutor()
Application.setMainWidget(MainWindow)
MainWindow.show()
Application.exec_loop()

Ich habe das ganze Projekt(chen) mal auf meine HP gestellt. Kann unter python.normann-live.de (http://python.normann-live.de) herunter geladen werden.

05.10.2002: Der Code auf der HP wurde auf den neuesten Stand gebracht! Kann jetzt auch eine Configdatei. lesen und schreiben

Hans

anda_skoa
04-10-2002, 19:48
Wie schon gesagt, ich hab nicht so viel Ahnung von Python.
Ich hab folgendes gemacht
#> python
Python 2.1.3 (#1, Jul 29 2002, 22:34:51)
[GCC 2.95.4 20011002 (Debian prerelease)] on linux2
Type "copyright", "credits" or "license" for more information.
>>> import ConfigParser
>>> config = ConfigParser.ConfigParser(self)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: name 'self' is not defined
>>> config = ConfigParser.ConfigParser()
>>> config .read(".licq/licq.conf");
>>> print config.sections()
['groups', 'licq', 'plugins', 'onevent', 'network', 'stats']
>>> print config.get("groups", "DefaultGroup")
0

wobei in licq.conf unter anderem das steht
[groups]
NumOfGroups = 7
DefaultGroup = 0

Vielleicht kannst du damit was anfangen.

Ciao,
_

anda_skoa
04-10-2002, 21:03
OK, ich denke ich habs :)

Das Problem ist diese Zeile hier:


config = ConfigParser.ConfigParser(self)


Du übergibts dem ConfigParser Konstruktor "self", also die aktuelle Instanz von Tutor.
Das ist aber kein Dictionary und hat darum auch nicht die erwartete copy Methode.

Der Parameter des ConfigParser Konstruktor ist ein Dictionary mit den Defaultwerten:
aus ConfigParser.py:


__init__(defaults=None)
create the parser and specify a dictionary of intrinsic defaults. The
keys must be strings, the values must be appropriate for %()s string
interpolation. Note that `__name__' is always an intrinsic default;
it's value is the section's name.


Alles geraten, kann auch anders sein :)
Aber es kann nicht schaden, mla zu versuchen das self beim Aufruf weg zu lassen (keine defaults)

Ciao,
_

Hans-Georg Normann
04-10-2002, 22:52
grrrrr....

thanks, aber das hatte ich bereits nach einem schier endlosen Martyrium selbst rausbekommen. (Dafür ist das jetzt hoffentlich tief eingebrannt:mad: )

Mit dem Lesen habe ich ja jetzt auch keine Probs mehr. Nur ConfigDateien schreiben will noch nicht so ganz. Was meinen die bei der Methode write(fileobject) eigentlich mit fileobject? Wenn ich da nach alter Väter Sitte einen Dateinamen eingebe, schluckt Python das auch, wenn ich dann allerdings eine set('Section', 'option', 'value') sagt mir die Kiste, das 'Section 'Section' nicht existiert.

Da ja bekanntlich Computer nie irren (außer vielleicht die Systeme mit dem $ Zeichen), muß wohl an meinen Ausführungen was falsch sein. Aber das regele ich wohl morgen.

Hans

Hans-Georg Normann
05-10-2002, 00:38
Google und der liebe Gott wissen eben alles......

Quelle: http://www.oreilly.com/catalog/pythonsl/chapter/ch05.html#t8

File: configparser-example-2.py

import ConfigParser
import sys

config = ConfigParser.ConfigParser()

# set a number of parameters
config.add_section("book")
config.set("book", "title", "the python standard library")
config.set("book", "author", "fredrik lundh")

config.add_section("ematter")
config.set("ematter", "pages", 250)

# write to screen
config.write(sys.stdout)

[book]
title = the python standard library
author = fredrik lundh

[ematter]
pages = 250


Hans