import os, sys, traceback from win32com.axscript import axscript from win32com.axscript.server import axsite from win32com.axscript.server.error import Exception import pythoncom from win32com.server import util import win32ui version = "0.0.1" class MySite(axsite.AXSite): def OnScriptError(self, error): print("An error occurred in the Script Code") exc = error.GetExceptionInfo() try: text = error.GetSourceLineText() except: text = "" context, line, char = error.GetSourcePosition() print("Exception: %s (line %d)\n%s\n%s^\n%s" % (exc[1], line, text, " " * (char-1), exc[2])) class ObjectModel: _public_methods_ = [ 'echo', 'msgbox' ] def echo(self, *args): print(''.join(map(str, args))) def msgbox(self, *args): msg = ''.join(map(str, args)) win32ui.MessageBox(msg) def TestEngine(): model = {'Test' : util.wrap(ObjectModel()) } scriptDir = "." site = MySite(model) pyEngine = site._AddEngine("Python") # pyEngine2 = site._AddEngine("Python") vbEngine = site._AddEngine("VBScript") # forthEngine = site._AddEngine("ForthScript") try: # code = open(os.path.join(scriptDir, "debugTest.4ths"),"rb").read() # forthEngine.AddCode(code) code = open(os.path.join(scriptDir, "debugTest.pys"),"rb").read() pyEngine.AddCode(code) code = open(os.path.join(scriptDir, "debugTest.vbs"),"rb").read() vbEngine.AddCode(code) # code = open(os.path.join(scriptDir, "debugTestFail.pys"),"rb").read() # pyEngine2.AddCode(code) # from win32com.axdebug import axdebug # sessionProvider=pythoncom.CoCreateInstance(axdebug.CLSID_DefaultDebugSessionProvider,None,pythoncom.CLSCTX_ALL, axdebug.IID_IDebugSessionProvider) # sessionProvider.StartDebugSession(None) input("Press enter to continue") # forthEngine.Start() pyEngine.Start() # Actually run the Python code vbEngine.Start() # Actually run the VB code except pythoncom.com_error as details: print("Script failed: %s (0x%x)" % (details[1], details[0])) # Now run the code expected to fail! # try: # pyEngine2.Start() # Actually run the Python code that fails! # print "Script code worked when it should have failed." # except pythoncom.com_error: # pass site._Close() if __name__ == '__main__': import win32com.axdebug.util try: TestEngine() except: traceback.print_exc() win32com.axdebug.util._dump_wrapped() sys.exc_type = sys.exc_value = sys.exc_traceback = None print(pythoncom._GetInterfaceCount(),"com objects still alive")