Datei-Import über String-Variable

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
Shot-gun
User
Beiträge: 3
Registriert: Mittwoch 13. September 2006, 10:15

Mittwoch 13. September 2006, 13:23

Hallo Forum,

folgendes Problem:

Je nach Benutzer-Auswahl muss ich eine bestimmte py-Datei importieren und eine Funktion in dieser Datei starten. Bis jetzt importiere ich ALLE Dateien, die zur Verfügung stehen. So ungefähr:

Code: Alles auswählen

########################
# aktuelle Situation
########################

# Imports
import time
import g_var    # Globale Variablen


# Meine Imports
# Alle zur Auswahl stehende .py-Dateien bzw. Tests importieren
import test1
import test2
import test3
    .
    .
    .
    .
   usw.

# Ausgewähltes Test starten
# g_var.Start entspricht der Benutzerauswahl
if (g_var.Auswahl = 1):
   UUT = "Test: test1"
   print "Test Nr.1 wird gestartet"
   test1.Starte(0)

elif (g_var.Auswahl = 2):
   UUT = "Test: test2"
   print "Test Nr.2 wird gestartet"
   test2.Starte(0)

elif (g_var.Auswahl = 3):
   UUT = "Test: test3"
   print "Test Nr.3 wird gestartet"
   test3.Starte(0)
    .
    .
    .
    .
   usw.

Es wird langsam unübersichtlich, wenn ein neuer Test bzw. py-Datei zum Projekt hinzugefügt wird muss ich mein Code anpassen. Mein Lösung des Problems wäre folgender Code, wenn es funktionieren würde :P

Code: Alles auswählen

########################
# Meine Lösung des Problems (läuft nicht)
########################

# Imports
import time
import g_var

# Meine Imports
# nur zum ausgewählten Test dazugehörige .py-Datei importieren
FileToImport = g_var.Auswahl   # z.B.: g_var.Auswahl="test1"

import FileToImport  # FileToImport == String-Variable


UUT = "Test: " + g_var.Auswahl
print "Test " + g_var.Auswahl + " wird gestartet"
FileToImport.Starte(0)

Meine Frage an Euch:

Wie muss ich mein Code ändern damit es läuft?



Gruß
Alexander
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

Mittwoch 13. September 2006, 13:57

Natürlich kann es nicht gehen, da du dein
Modul doch nicht importierst.
baue doch einfach so etwas ein wie:

Code: Alles auswählen

import g_var.Auswahl
Shot-gun
User
Beiträge: 3
Registriert: Mittwoch 13. September 2006, 10:15

Mittwoch 13. September 2006, 14:04

pr0stAta hat geschrieben:Natürlich kann es nicht gehen, da du dein
Modul doch nicht importierst.
baue doch einfach so etwas ein wie:

Code: Alles auswählen

import g_var.Auswahl

Hi
Danke für deine Antwort!

Wo ist der Unterschied zu meinem Code?

Die g_var.Auswahl ist eine globale Variable, da wird die Benutzerauswahl abgespeichert. Als laufende Nummer oder als Text, kann ich definieren...
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Mittwoch 13. September 2006, 14:30

Das Argument hinter import darf kein String sein. Deshalb funktioniert es nicht. Probier mal:

Code: Alles auswählen

exec('import %s as Test' % g_var.Auswahl)
Ein Vorteil ist dann zusätzlich, dass Du im Script auf das Modul immer unter demselben Namen zugreifen kannst, hier beispielhaft Test.
Mfg
HWK
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

Mittwoch 13. September 2006, 14:32

Arg entschuldigung...
war mal wieder zu flott unterwegs und hatte

Code: Alles auswählen

import FileToImport
übersehen...
Und man importiert module nicht über exec!
versuche das hier:

Code: Alles auswählen

modul_name = raw_input("Modul Name: ")
mod = __import__(modul_name)
mod.starte(0)
Passende Infos dazu gibts:
http://www.pythonwiki.de/ModulImporte
http://www.python.org/doc/current/lib/b ... funcs.html
Shot-gun
User
Beiträge: 3
Registriert: Mittwoch 13. September 2006, 10:15

Mittwoch 13. September 2006, 15:32

Vielen Dank!!!
Es tut jetzt :lol:

Code: Alles auswählen

# Imports
import time
import g_var

# Meine Imports
# nur zum ausgewählten Test dazugehörige .py-Datei importieren
FileToImport = g_var.Auswahl   # z.B.: g_var.Auswahl="test1"

mod = __import__(FileToImport)

UUT = "Test: " + FileToImport
print "Test " + FileToImport + " wird gestartet"
mod.Starte(0)
Antworten