ich wollte eine __init__.py schreiben, die automatisch alle gefundenen Skripte importiert. Die Routine läuft auch wunderbar durch, ich bekomme aber sobald ich auf eines der Skripte zugreifen möchhte gesagt, das das jeweilige Skirpt nicht importiert wurde.
So ein importierender Skriptname ist z. B . test_1.py
Code: Alles auswählen
import os, os.path, sys, imp, string, time
CONST_TESTPATH = "./py_tests/" #'.'
CONST_TESTFILE_CRITERIA_VALUE = str("*")
CONST_TESTFILE_IDENT = "test_"+CONST_TESTFILE_CRITERIA_VALUE+".py" # Suchschema, Suchkriterium
CONST_ENVIROMENT = {'PYTHONPATH':['./pyscripts/lib','./PyScripts/py_tests','./pyscripts/test_plan','./pyscripts/lib/bacnet','./pyscripts/lib/bacdb','./pyscripts/lib/guicom']}
CONST_SPLIT_VALUE = ";" # für die Umwandlung von Umgebungsvariablenstring in eine Liste.
DEBUG = 1 # bei 1 werden ausgaben getätigt, bei 0 nicht.
class TestInit:
testlist = []
path = os.path.abspath(CONST_TESTPATH)
print path
importCnt = 0
failedCnt = 0
insertVarCnt = 0
isVarCnt = 0
def __init__(self):
sys.path.append(self.path)
self._checkEnviroment(); # Überprüft die Umgebungsvariablen und setzt diese Notfalls.
if DEBUG : print "-"*82+"\nStatistik: \n\nUmgebungsvariablen wurden ", self.insertVarCnt," hinzugefügt, ",self.isVarCnt, "waren schon gesetzt.\n\n"
self._importTests()
if DEBUG : print "-"*82+"\nStatistik: \n\nNach Schema ",CONST_TESTFILE_IDENT," wurden ", self.importCnt," importiert, ",self.failedCnt, "konntent nicht importiert werden."
def _checkEnviroment(self):
''' Überprüft ob Umgebungsvariablen gesetzt sind und wenn nicht , dann wird dies Automatisiert nachgeholt.
@params None
@return None'''
my_Enviroment = CONST_ENVIROMENT.keys() # Meine Konstanten für das Sytem.
act_Enviroment = os.environ.keys() # aktuelle Systemschlüssel des Systems
for env in act_Enviroment: # holt den PYTHONPATH
if env in my_Enviroment:
# Variablen nach denen im System gesucht werden soll und die eingetragen werden sollen.
u_Var_ValuesList = CONST_ENVIROMENT[env]
# Bereits eingetragene Parameter in den Umgebungsvariablen.
old_u_Var_ParamsString = os.environ[env]
u_Var_ParamsList = os.environ[env].split(CONST_SPLIT_VALUE)
newEnviroString = "" # Dieser String wird sptäer i die Umgebundvariablen gesetzt.
for param in u_Var_ValuesList: # Eintrag der einzutragenen Werte.
for sysParam in u_Var_ParamsList:
if self.completePaths(param) != os.path.normcase(sysParam):
print self.completePaths(param) ," != ", os.path.normcase(sysParam)
newEnviroString += self.completePaths(param)+ ";"
if DEBUG : print newEnviroString, " ist bereits gesetzt."
self.isVarCnt += 1
else:
if DEBUG : print "Umgebungsvariablen sind gesetzt."
self.insertVarCnt += 1
if newEnviroString != "":
os.environ[env] = newEnviroString + ";" + old_u_Var_ParamsString
if DEBUG : print os.environ
def completePaths(self, unCompletePath ):
''' Erzeugt einen vollständigen Pfad, der später in die Umgebungsvariable eingetragen wird.
@params unCompletePath - Pfadfragment.
@return vollständiger Pfad.'''
ret = os.path.abspath(os.path.join(self.path,unCompletePath))
return os.path.normcase(ret)
def _importTests(self):
''' Importiert jedes gefundene testskript, das dem Suchkriterium entspricht.
@params None.
@return None.'''
ident = CONST_TESTFILE_IDENT.split(CONST_TESTFILE_CRITERIA_VALUE)
if len(ident) == 1: # Wenn kein Lueckenfueller angegeben wurde, dann suche auch nicht nach diesem Schema
ident.append("")
for f in os.listdir(self.path):
if f.startswith(ident[0]) and f.endswith(ident[1]):
testFile = f.split('.')[0]
try:
exec 'from ' + testFile + ' import *'
#if DEBUG :print testFile + " erfolgreich importiert"
self.importCnt += 1
except Exception,e:
if DEBUG :print "Fehlermeldung: Testfile " , testFile , "konnte nicht importiert werden.", e
self.failedCnt += 1
#sys.stdout = 'Fehlermeldung: Testfile ', testFile , 'konnte nicht importiert werden.',e
#if __name__ == '__main__':
TestInit()
Danke für Eure Hilfe.
Greetz from 2bock