Python In Python andere Python Dateien ausführen (dynamic import)

Falc410

Vice Admiral
Registriert
Juni 2006
Beiträge
6.385
Ich habe einige Python Scripte die Updates an einer Datenbank vornehmen. Die Scripte heißen z.b. update-1.2-0.py oder update-1.3.1.py

Wenn die Software gestartet wird, wird überprüft welche Version installiert ist und welche Version der Datenbank läuft und dann sollen entsprechend alle nötigen Update Scripts ausgeführt werden. Es ist alle so weit fertig bis auf das ausführen der Dateien.

Die Update Scripte besitzen keine Klasse sondern nur ein paar Funktionen und am Ende eben eine main() Funktion und lassen sich einfach mit python update-1.2.0.py ausführen. Wie kann ich das nun dynamisch im Code machen? Habe es mit import, exec und imp.load_source probiert aber nichts davon hat funktioniert.

Alternativ muss ich halt den Programmstart abbrechen und printen das der Admin doch bitte per Hand Script A,B und C ausführt - ist unschön.
 
guck dir dieses Modul an:
https://docs.python.org/2/library/imp.html

code example with "Module.py" containing class "Module":
Code:
name = "Module"
file, pathName, description = imp.find_module(name, "/my/path/to/module")
my_module = imp.load_module(name, file, pathName, description)
exec("mod = my_module.%s()" % name) # might need constructor arguments
mod.doSomething()
 
Das imp hatte ich ja schon ausprobiert aber es hat nicht geklappt. Wahrscheinlich weil ich eben keine Klasse definiert habe in den Update Scripts.

OS Subprocess und dann ein python update-script.py will ich nur im äußersten Notfall nehmen. Nicht nur das es wohl Bad Practice ist, aber das ist auch eine Sicherheitslücke.
 
Zurück
Oben