Führt sich nach import mehrfach aus
Verfasst: Dienstag 12. Juni 2007, 09:25
Ich habe eine Klasse gebastelt, die mir meine SQL-Befehle ausführen und die Connection zum SQL-Server verwalten soll. Wenn ich diese aber in meine Projekte importiere, führen die sich mehrfach aus. Das heist, nachdem es Ordnungsgemäß einmal durchgelaufen ist, fängt er wieder von vorn an. Ich kann mir nicht erklären warum dies so ist. Ich hoffe ihr könnt mir weiterhelfen. Geschrieben ist dies für die Firebird-SQL-Datenbank in verbindung mit kinterbasdb.
Meine erstellte Klasse:
Mein Importaufruf sieht wie folgt aus:
Diese aufrufe allein verursachen schon das Problem, ohne dass ein execute, etc aufgerufen wurde.
Die logfile wird von einem anderen modul geschrieben, dass alle stdout's in diese schreibt.
Lasse ich den Import aus, läuft das eigendliche Script einwandfrei. Daher denke ich, dass es an der oben geposteten Klasse liegen muss.
Ich hoffe ihr könnt mir weiterhelfen.
Mit freundlichen Grüßen
Zack
Meine erstellte Klasse:
Code: Alles auswählen
import string, win32net, win32api, kinterbasdb, os, sys
import ConfigParser
# ------------------------------------------------------------------------------
# Verbindung zum SQL-Server aufbauen
class wSubprocess:
def __init__(self):
global con
if not kinterbasdb.initialized:
kinterbasdb.init(type_conv=200)
con = kinterbasdb.connect(dsn='C:/TEST2.FDB', user='user', password='pass')
# ------------------------------------------------------------------------------
# Die SQL-Befehle für kinterbasdb aufbereiten
def execute(self, *argv):
cur = con.cursor()
if (len(argv) < 2):
cur.execute(argv[0])
else:
cur.execute(argv[0],argv[1])
con.commit()
cur.close()
# ------------------------------------------------------------------------------
# Prozesse ausführen und die ausgaben an stdout übergeben, um so die log zu füllen, die als blob in die db kommt
def run(self, command, error='Crashed'):
self.setHighID()
import subprocess
p=subprocess.Popen(command, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE )
res = p.wait()
if res <> 0:
print p.stderr.read()
f = file(logfile, 'rb')
cur = con.cursor()
cur.execute("UPDATE W_BUILD set W_STATUS = ? WHERE W_ID = ?",(error,highid))
cur.execute("UPDATE W_BUILD set W_LOG = ? WHERE W_ID = ?",(f.read(),highid))
con.commit()
cur.close()
f.close()
os.remove(logfile)
else:
print p.stdout.read()
f = file(logfile, 'rb')
cur = con.cursor()
cur.execute("UPDATE W_BUILD set W_LOG = ? WHERE W_ID = ?",(f.read(),highid))
con.commit()
cur.close()
f.close()
return res
# ------------------------------------------------------------------------------
# den letzten SQL-Eintrag ermitteln
def setHighID(self):
global highid
cur = con.cursor()
cur.execute("SELECT W_ID FROM W_BUILD ORDER BY W_ID DESC")
highid = cur.fetchone()[0]
cur.close()
return highid
# ------------------------------------------------------------------------------
# Die Log-File setzen
def setLogFile(self, argv):
global logfile
logfile = argv
# ------------------------------------------------------------------------------
def close(self):
con.close()
os.remove(logfile)
Code: Alles auswählen
from wBuildManager import wPyRun
run = wPyRun.wSubprocess()
run.setLogFile(mylog.log)
...
run.close()
Die logfile wird von einem anderen modul geschrieben, dass alle stdout's in diese schreibt.
Lasse ich den Import aus, läuft das eigendliche Script einwandfrei. Daher denke ich, dass es an der oben geposteten Klasse liegen muss.
Ich hoffe ihr könnt mir weiterhelfen.
Mit freundlichen Grüßen
Zack