Externe Skripts hinzufügen. Probleme mit dem Kontext
Verfasst: Samstag 10. Mai 2008, 16:03
moin
Ich will es dem Benutzer erlauben meine Software mit hilfe von Skripts zu steuern. Dabei will ich aber nur, dass die Skripts auf ein einzige Variable zugreifen können. Ich habe das versucht so zu lösen:
Die Funktion reloadScripts() wird irgendwann von meiner Software ausgeführt. Das Funktioniert auch ganz gut allerdings kann das Skript Callbacks erstellen die aber zum Teil Variablen verwenden die im Skript Global sind (ich hoffe ich drücke mich richtig aus).
z.B. So:
Hier erhalte ich:
exceptions.UnboundLocalError: local variable 'var' referenced before assignment
Ich will es dem Benutzer erlauben meine Software mit hilfe von Skripts zu steuern. Dabei will ich aber nur, dass die Skripts auf ein einzige Variable zugreifen können. Ich habe das versucht so zu lösen:
Code: Alles auswählen
from twisted.internet import defer
class scriptEngine:
"""
The scripting engine. Communicates with the user scripts.
"""
__shared_state = {}
__loaded = 0
scriptPath = ""
callbackIndex={}
processQueue=[]
scriptnamespace={}
def __init__(self):
self.__dict__=self.__shared_state
if not self.__loaded:
self.scriptnamespace={'secs':self}
self.__loaded=1
def reloadScripts(self):
""" Reloads the user scripts """
self.callbackIndex={}
execfile(self.scriptPath,self.scriptnamespace)
def addCallback(self,agent,job,port=-1,processid=-1):
# Viele weitere Funktionen auf die der Benutzer zugreifen kann
z.B. So:
Code: Alles auswählen
print "Testskript 03"
var=-1
def pongCallback(data):
print var
var += 1
secs.addCallback(1,"CORE-PING").addCallback(pongCallback)
secs.addCallback(1,"CORE-PING").addCallback(pongCallback)
exceptions.UnboundLocalError: local variable 'var' referenced before assignment