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