File open close - nach exec

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
api
User
Beiträge: 181
Registriert: Donnerstag 7. August 2008, 21:23

Hallo zusammen,

ich lese mit meinem Prg Variablenwerte zur Laufzeit ein. Dieses mache ich mit dem Kommando:

Code: Alles auswählen

exec(compile(open(CONFIG_FILE).read(), CONFIG_FILE, 'exec'))
In dieser Datei (CONFIG_FILE) stehen zB Variablen, wie:

a = 1
b = 2

Unter Python 2.7 lief alles ohne Probleme. Jetzt unter 3.2 läuft es auch, aber ich bekomme immer folgende Warnung:

Code: Alles auswählen

ftpinter3:112: ResourceWarning: unclosed file <_io.TextIOWrapper name='/app/etc/ftpinter3.cfg' mode='r' encoding='UTF-8'>
  exec(compile(open(CONFIG_FILE).read(), CONFIG_FILE, 'exec'))
Meine Fragen nun:
  • - Wie kann man diese Datei wieder schließen? Ich habe ja keinen Handler.
    - Oder könnte man einfach die Warnung abschalten? (Wäre natürlich nicht gerade sauber)
CU,
api
deets

Mir ist ein bisschen schummerig, nachdem ich das gelesen habe. Das du durch dieses Configurations-einlesen eine Scheunentor-grosse Sicherheitsluecke eingebaut hast, ist dir hoffentlich bewusst? Und das es auch auesserst schlecht zu verstehen und debuggen ist?

Es waere *wesentlich* besser, wenn du einfach eine ini-style Konfigurationsdatei einlesen wuerdest, und auf deren Werte dann wie in einem dictionary zugreifst.

Zu deinem Problem: nichts hindert dich doch daran, aus deinem Statement etwas zu machen ala

Code: Alles auswählen

with open(CONFIG_FILE) as inf:
        exec(compile(inf.read()))
Aber, nochmal: am besten vergisst du, dass exec existiert. Ich programmiere jetzt seit 13 Jahren Python, und ich habe es nicht einmal verwenden muessen.
api
User
Beiträge: 181
Registriert: Donnerstag 7. August 2008, 21:23

Hi deets,

schonmal vorab: DANKE !!! Genau das wollte ich wissen... :D
(es ist manchmal so einfach...)

Sicherlich hätte ich damals das nicht per "exec" lösen sollen. Was allerdings den Sicherheitsaspekt angeht, so wäre ich das einzige Risiko, da sonst niemand an diese Datei rankommt. Aber "exec" braucht man wirklich nicht - da hast du vollkommen recht...

Da gibt es bessere Möglichkeiten - wahrscheinlich wird es demnächst in XML abgebildet oder als "ini"-Datei...


CU,
api
Antworten