[python-win32] Strange order of OnEnter/LeaveScript site methods in application hosting Python active scripting engine

Mark Hammond mhammond at skippinet.com.au
Fri May 31 01:27:41 CEST 2013


On 31/05/2013 5:33 AM, Milan Kaše wrote:
> I tried to take stack dumps (attached bellow) and it seems that the
> first pair of calls is coming from CompileInScriptedSection while the
> second pair is from ExecInScriptedSection. Do you have a clue what's
> going on here?

Right - script blocks are compiled before they are executed.  I really 
can't remember why the compilation step does this - what problem is it 
causing you?

Mark
>
> 0.00000000*** OnEnterScript ***
> 0.00142864 File
> "C:\Python27\lib\site-packages\win32com\server\policy.py", line 324, in
> _InvokeEx_
> 0.00142864   return self._invokeex_(dispid, lcid, wFlags, args, kwargs,
> serviceProvider)
> 0.00142864 File
> "C:\Python27\lib\site-packages\win32com\server\policy.py", line 585, in
> _invokeex_
> 0.00142864   return func(*args)
> 0.00142864 File
> "C:\Python27\lib\site-packages\win32comext\axscript\client\framework.py", line
> 610, in SetScriptState
> 0.00142864   self.Run()
> 0.00142864 File
> "C:\Python27\lib\site-packages\win32comext\axscript\client\framework.py", line
> 788, in Run
> 0.00142864   self.ExecutePendingScripts()
> 0.00142864 File
> "C:\Python27\lib\site-packages\win32comext\axscript\client\framework.py", line
> 736, in ExecutePendingScripts
> 0.00142864   self.DoExecutePendingScripts()
> 0.00142864 File
> "C:\Python27\lib\site-packages\win32comext\axscript\client\pyscript.py",
> line 237, in DoExecutePendingScripts
> 0.00142864   if self.CompileInScriptedSection(codeBlock, "exec"):
> 0.00142864 File
> "C:\Python27\lib\site-packages\win32comext\axscript\client\framework.py", line
> 872, in CompileInScriptedSection
> 0.00142864   self.BeginScriptedSection()
> 0.00142864 File
> "C:\Python27\lib\site-packages\win32comext\axscript\client\framework.py", line
> 972, in BeginScriptedSection
> 0.00142864   win32api.OutputDebugString("".join(traceback.format_stack()))
> 0.00574597*** OnLeaveScript ***
> 0.00618566 File
> "C:\Python27\lib\site-packages\win32com\server\policy.py", line 324, in
> _InvokeEx_
> 0.00618566   return self._invokeex_(dispid, lcid, wFlags, args, kwargs,
> serviceProvider)
> 0.00618566 File
> "C:\Python27\lib\site-packages\win32com\server\policy.py", line 585, in
> _invokeex_
> 0.00618566   return func(*args)
> 0.00618566 File
> "C:\Python27\lib\site-packages\win32comext\axscript\client\framework.py", line
> 610, in SetScriptState
> 0.00618566   self.Run()
> 0.00618566 File
> "C:\Python27\lib\site-packages\win32comext\axscript\client\framework.py", line
> 788, in Run
> 0.00618566   self.ExecutePendingScripts()
> 0.00618566 File
> "C:\Python27\lib\site-packages\win32comext\axscript\client\framework.py", line
> 736, in ExecutePendingScripts
> 0.00618566   self.DoExecutePendingScripts()
> 0.00618566 File
> "C:\Python27\lib\site-packages\win32comext\axscript\client\pyscript.py",
> line 237, in DoExecutePendingScripts
> 0.00618566   if self.CompileInScriptedSection(codeBlock, "exec"):
> 0.00618566 File
> "C:\Python27\lib\site-packages\win32comext\axscript\client\framework.py", line
> 880, in CompileInScriptedSection
> 0.00618566   self.EndScriptedSection()
> 0.00618566 File
> "C:\Python27\lib\site-packages\win32comext\axscript\client\framework.py", line
> 979, in EndScriptedSection
> 0.00618566   win32api.OutputDebugString("".join(traceback.format_stack()))
> 0.00675985*** OnEnterScript ***
> 0.00718076 File
> "C:\Python27\lib\site-packages\win32com\server\policy.py", line 324, in
> _InvokeEx_
> 0.00718076   return self._invokeex_(dispid, lcid, wFlags, args, kwargs,
> serviceProvider)
> 0.00718076 File
> "C:\Python27\lib\site-packages\win32com\server\policy.py", line 585, in
> _invokeex_
> 0.00718076   return func(*args)
> 0.00718076 File
> "C:\Python27\lib\site-packages\win32comext\axscript\client\framework.py", line
> 610, in SetScriptState
> 0.00718076   self.Run()
> 0.00718076 File
> "C:\Python27\lib\site-packages\win32comext\axscript\client\framework.py", line
> 788, in Run
> 0.00718076   self.ExecutePendingScripts()
> 0.00718076 File
> "C:\Python27\lib\site-packages\win32comext\axscript\client\framework.py", line
> 736, in ExecutePendingScripts
> 0.00718076   self.DoExecutePendingScripts()
> 0.00718076 File
> "C:\Python27\lib\site-packages\win32comext\axscript\client\pyscript.py",
> line 238, in DoExecutePendingScripts
> 0.00718076   self.ExecInScriptedSection(codeBlock, globs)
> 0.00718076 File
> "C:\Python27\lib\site-packages\win32comext\axscript\client\framework.py", line
> 899, in ExecInScriptedSection
> 0.00718076   self.BeginScriptedSection()
> 0.00718076 File
> "C:\Python27\lib\site-packages\win32comext\axscript\client\framework.py", line
> 972, in BeginScriptedSection
> 0.00718076   win32api.OutputDebugString("".join(traceback.format_stack()))
> 3.00900340*** OnLeaveScript ***
> 3.00964451 File
> "C:\Python27\lib\site-packages\win32com\server\policy.py", line 324, in
> _InvokeEx_
> 3.00964451   return self._invokeex_(dispid, lcid, wFlags, args, kwargs,
> serviceProvider)
> 3.00964451 File
> "C:\Python27\lib\site-packages\win32com\server\policy.py", line 585, in
> _invokeex_
> 3.00964451   return func(*args)
> 3.00964451 File
> "C:\Python27\lib\site-packages\win32comext\axscript\client\framework.py", line
> 610, in SetScriptState
> 3.00964451   self.Run()
> 3.00964451 File
> "C:\Python27\lib\site-packages\win32comext\axscript\client\framework.py", line
> 788, in Run
> 3.00964451   self.ExecutePendingScripts()
> 3.00964451 File
> "C:\Python27\lib\site-packages\win32comext\axscript\client\framework.py", line
> 736, in ExecutePendingScripts
> 3.00964451   self.DoExecutePendingScripts()
> 3.00964451 File
> "C:\Python27\lib\site-packages\win32comext\axscript\client\pyscript.py",
> line 238, in DoExecutePendingScripts
> 3.00964451   self.ExecInScriptedSection(codeBlock, globs)
> 3.00964451 File
> "C:\Python27\lib\site-packages\win32comext\axscript\client\framework.py", line
> 905, in ExecInScriptedSection
> 3.00964451   self.EndScriptedSection()
> 3.00964451 File
> "C:\Python27\lib\site-packages\win32comext\axscript\client\framework.py", line
> 979, in EndScriptedSection
> 3.00964451   win32api.OutputDebugString("".join(traceback.format_stack()))
> 3.01041079pythoncom error:
> 3.01048589Unexpected exception in gateway method 'SetScriptSite'
> 3.01056170
> 3.01062036
> 3.01094675Traceback (most recent call last):
> 3.01094675 File
> "C:\Python27\lib\site-packages\win32com\server\policy.py", line 324, in
> _InvokeEx_
> 3.01094675   return self._invokeex_(dispid, lcid, wFlags, args, kwargs,
> serviceProvider)
> 3.01094675 File
> "C:\Python27\lib\site-packages\win32com\server\policy.py", line 585, in
> _invokeex_
> 3.01094675   return func(*args)
> 3.01094675 File
> "C:\Python27\lib\site-packages\win32comext\axscript\client\framework.py", line
> 580, in SetScriptSite
> 3.01094675   self.lcid = site.GetLCID()
> 3.01094675AttributeError: 'NoneType' object has no attribute 'GetLCID'
> 3.01102114pythoncom error:
> 3.01107931Unexpected gateway error
> 3.01122880
> 3.01147223
> 3.01194453Traceback (most recent call last):
> 3.01194453 File
> "C:\Python27\lib\site-packages\win32com\server\policy.py", line 324, in
> _InvokeEx_
> 3.01194453   return self._invokeex_(dispid, lcid, wFlags, args, kwargs,
> serviceProvider)
> 3.01194453 File
> "C:\Python27\lib\site-packages\win32com\server\policy.py", line 585, in
> _invokeex_
> 3.01194453   return func(*args)
> 3.01194453 File
> "C:\Python27\lib\site-packages\win32comext\axscript\client\framework.py", line
> 580, in SetScriptSite
> 3.01194453   self.lcid = site.GetLCID()
> 3.01194453AttributeError: 'NoneType' object has no attribute 'GetLCID'
>
>
>
> 2013/5/30 Mark Hammond <skippy.hammond at gmail.com
> <mailto:skippy.hammond at gmail.com>>
>
>     Apart from the engine being called with no script to execute for
>     some reason, it may be that an event handler is being added, which
>     causes Python to execute things twice - once to "build" the event
>     handler, and again when it is actually executed.
>
>     Either way, if you check out
>     win32comext/axscript/client/__framework.py and look for
>     ApplyInScriptedSection(), you will find where these calls originate
>     from.  If you can print (or otherwise arrange to see) what the code
>     is, it might give us more of a clue.
>
>     HTH,
>
>     Mark
>
>
>     On 30/05/2013 3:34 AM, Milan Kaše wrote:
>
>         Hello,
>         a user of our application which can host various active scripting
>         engines reported problems when using the application together with
>         Python active scripting engine. I traced the problem down to the
>         order
>         in which the engine calls the site's OnEnterScript/OnLeaveScript
>         methods.
>
>         The usual scenario with other engines (including MS JScript and
>         VBScript) is:
>         1. OnEnterScript
>         2. ...executing script...
>         3. OnLeaveScript
>
>         However with Python engine, after calling
>         IActiveScript.SetScriptState(__SCRIPTSTATE_CONNECTED) the
>         scenario is
>         following:
>         1. OnEnterScript
>         2. OnLeaveScript
>         3. OnEnterScript
>         4. ...executing script...
>         5. OnLeaveScript
>
>         One would expect either the first scenario or in case the events are
>         raised multiple times, then the calls should be nested (as stated in
>         MSDN,
>         http://msdn.microsoft.com/en-__us/library/9c1cww48(v=vs.94).__aspx
>         <http://msdn.microsoft.com/en-us/library/9c1cww48(v=vs.94).aspx>).
>         Is the Python's way of calling these methods intentional or is
>         it a bug?
>
>         Thanks,
>         Milan
>
>
>         _________________________________________________
>         python-win32 mailing list
>         python-win32 at python.org <mailto:python-win32 at python.org>
>         http://mail.python.org/__mailman/listinfo/python-win32
>         <http://mail.python.org/mailman/listinfo/python-win32>
>
>
>



More information about the python-win32 mailing list