Schnittstelle für dynamisches laden von Modulen

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
sebmichel
User
Beiträge: 1
Registriert: Freitag 13. Juni 2008, 17:23

Freitag 13. Juni 2008, 17:47

Hi zusammen.

ich habe mal eine Frage. Ich bin gerade dabei ein Programm zu schreiben welches automatisch in einem Unterordner nach weiteren Modulen sucht. Diese Module werden dann dynmisch geladen wie folgt:

Code: Alles auswählen

def importModules():
        global NUM, DATA
        for f in os.listdir(DIR):
                module_name, ext = os.path.splitext(f) files, etc.
                if ext == '.py':
                        module = __import__(module_name)
                        try:
                                DATA[NUM, 1] = getattr(module,'__short_desc__')
                        except:
                                DATA[NUM, 1] = ""
                        try:
...
...
...
Jedes modul welches nachgeladen werden kann hat folgende Variablen welche immer gleich sind:

Code: Alles auswählen

__name__ = "first module"
__short_desc__ = "basic module"
__long_desc__  = "this is the long informtion about this module"
__author__ = "asdf"

dann hat jedes modul immer die funktion run() welche zum ausführen des Modules benötigt wird. So weit so gut. Nun benötigt jedes modul aber noch weitere variablen welche in dem Hauptprogramm gesetzt werden müssen damit das Modul seine arbeit beginnen kann.

ich weiß dass ich mit setattr(x,y,z) und getattr(x,y) variablen in anderen modulen lesen und setzen kann. allerdings muss hierfür der Name der Variable bekannt sein. Diese können(und werden) sich aber in meinen Modulen ändern. Auch die Anzahl der Variablen variiert. Statisch sind lediglich die vier oben angegeben.
Was muss ich nun tun damit ich Variablen 'on the fly' aus dem Modul bekomme und setzen kann?

ist ja auch möglich dass ich das ganze hier schon viel zu kompliziert angegangen bin und es eigentlich viel einfacher geht, aber ich habe erst gestern angefangen mit python zu programmieren, bin also noch sehr frisch auf dem Gebiet :)


hier ist noch einmal ein code für ein typisches module:

-------------------------------------------------------------

Code: Alles auswählen

#!/usr/bin/python

#global vars
__name__ = "asdf"
__short_desc__ = "asdf"
__long_desc__  = "asdf"
__author__ = "asdf"

#local vars
__var1__ = "need to be set"
__var2__ = "need to be set"

def run():
        first_func()

def first_func():
        print "first func called"
        return __var1__ + __var2__
----------------------------------------------------------------

Also noch einmal kurz zur Erklärung anhand dieses Modules:
Was ich möchte ist das mein Hauptprogramm beim laden des Modules erkennt das es dir Variablen __var1__ und __var2__ gibt und ich diese entsprechend in meinem Hauptprogramm ändern kann.

Ich hoffe ihr könnt mir hierbei ein wenig weiter helfen.


Schönes Wochenende,

MfG

S.Michel
http://www.pronet-systems.de/
OldBoy
User
Beiträge: 34
Registriert: Samstag 12. Januar 2008, 20:39

Freitag 13. Juni 2008, 18:29

Hi,

wie wär's denn ganz einfach mit: ( siehe Zeile 8 )

Code: Alles auswählen

#!/usr/bin/python

#global vars
__name__ = "asdf"
__short_desc__ = "asdf"
__long_desc__  = "asdf"
__author__ = "asdf"
__local_vars__ = ['__var1__', '__var2__']

#local vars
__var1__ = "need to be set"
__var2__ = "need to be set"

def run():
        first_func()

def first_func():
        print "first func called"
        return __var1__ + __var2__
Gruss

OldBoy
Antworten