--- a/connectors/PYRO/__init__.py Tue Mar 06 22:42:56 2012 +0100
+++ b/connectors/PYRO/__init__.py Sun Mar 11 22:00:15 2012 +0100
@@ -130,6 +130,10 @@
return RemotePLCObjectProxy.GetPLCstatus()
GetPLCstatus = PyroCatcher(_PyroGetPLCstatus, "Broken")
+ def _PyroRemoteExec(self, script, **kwargs): + return RemotePLCObjectProxy.RemoteExec(script, **kwargs) + RemoteExec = PyroCatcher(_PyroRemoteExec, (-1, "RemoteExec script failed!")) def __getattr__(self, attrName):
member = self.__dict__.get(attrName, None)
--- a/plugger.py Tue Mar 06 22:42:56 2012 +0100
+++ b/plugger.py Sun Mar 11 22:00:15 2012 +0100
@@ -169,7 +169,10 @@
+ def RemoteExec(self, script, **kwargs): + return self.PlugParent.RemoteExec(script, **kwargs) #Default, do nothing and return success
@@ -1776,6 +1779,11 @@
+ def RemoteExec(self, script, **kwargs): + if self._connector is None: + return -1, "No runtime connected" + return self._connector.RemoteExec(script, **kwargs) def DebugThreadProc(self):
This thread waid PLC debug data, and dispatch them to subscribers
@@ -1815,12 +1823,11 @@
def KillDebugThread(self):
- tmp_debugthread = self.DebugThread
- if tmp_debugthread is not None:
+ if self.DebugThread is not None: self.logger.writeyield(_("Stopping debugger...\n"))
- tmp_debugthread.join(timeout=5)
- if tmp_debugthread.isAlive() and self.logger:
+ self.DebugThread.join(timeout=5) + if self.DebugThread.isAlive() and self.logger: self.logger.write_warning(_("Couldn't stop debugger.\n"))
self.logger.write(_("Debugger stopped.\n"))
--- a/runtime/PLCObject.py Tue Mar 06 22:42:56 2012 +0100
+++ b/runtime/PLCObject.py Sun Mar 11 22:00:15 2012 +0100
@@ -34,6 +34,10 @@
from _ctypes import dlopen, dlclose
+def get_last_traceback(tb): @@ -389,3 +393,14 @@
#PLCprint("Debug error - wrong buffer unpack ! %d != %d"%(offset, size.value))
return self.PLCStatus, None, []
+ def RemoteExec(self, script, **kwargs): + e_type, e_value, e_traceback = sys.exc_info() + line_no = traceback.tb_lineno(get_last_traceback(e_traceback)) + return (-1, "RemoteExec script failed!\n\nLine %d: %s\n\t%s" % + (line_no, e_value, script.splitlines()[line_no - 1])) + return (0, kwargs.get("returnVal", None))