[python-win32] Trouble running profiler

Christopher Brichford chrisb at adobe.com
Tue Apr 5 18:43:02 CEST 2005


I get a similar errors if I use
win32com.client.gencache.EnsureDispatch instead of
win32com.client.Dispatch.  You get different error depending on the
contents of the pythonroot\lib\site-packages\win32com\gen_py\
directory.  If pythonroot\lib\site-packages\win32com\gen_py\ is empty
then you get the stack trace in the attachment error1.txt.  After you
run the test program once with or without the profiler, the
pythonroot\lib\site-packages\win32com\gen_py\ will not be empty.  When
you run the test program the second time you get the stack trace in
the attachment error2.txt

I was purposely using the dynamic version because the gencache stuff
does not work if you run python as a restricted user.  This seems to
be due to the fact that a restricted user can not make directories in
pythonroot\lib\site-packages\win32com\gen_py\...  If I were to use the
 non-dynamic code I would need a way to specify that all generated
files should be put somewhere under the user's profile.

I stopped using the Microsoft XML parser so I don't really need to use
win32com anymore.  I switch to the sgmlop parser which works fine with
the profiler.  If you are interested in continuing to work on this
issue, I'm more than happy to keep trying your suggestions.

Chris Brichford



Mark Hammond wrote:
> I'm afraid I haven't recently used the profiler with win32com.  I have
> recently used hotshot (which works quite well), but not with
> "win32com.client.dynamic" objects.  I've no idea where that error is coming
> from.
> 
> I'm not sure of the real issue, but I do note that the problem occurs when
> building "dynamic" information for the object.  Try running makepy first -
> this could be as simple as using win32com.client.gencache.EnsureDispatch()
> instead of a simple Dispatch.  That should avoid the failing code (and
> hopefully not just find something else that fails).
> 
> Mark.
> 
> 
>>-----Original Message-----
>>From: python-win32-bounces at python.org
>>[mailto:python-win32-bounces at python.org]On Behalf Of Christopher
>>Brichford
>>Sent: Tuesday, 5 April 2005 3:29 AM
>>To: python-win32 at python.org
>>Subject: [python-win32] Trouble running profiler
>>
>>
>>	I'm try to run the profiler on a program that uses
>>win32com.client to
>>access the Msxml2.DOMDocument COM class to load an XML document.  I
>>have attaced the stack trace I get when I run:
>>
>>python.exe -m profile profileTest.py
>>
>>I have also attached profileTest.py.  The profiler seems to work fine
>>on programs that don't use win32com.client.  Has anyone seen this
>>problem before?
>>
>>For those of you who are curious as to why I'm using the microsoft xml
>>parser:
>>The xml files I'm reading were created by a microsoft product and
>>contain newline characters in attribute values.  xml.dom.minidom
>>converts the newlines in the attribute values to reqular spaces.  It
>>is important that these new line characters are preserved.  I
>>discovered that the microsoft xml parser preserves new line characters
>>in an element's attribute value so I started using the win32com.client
>>stuff to get at microsoft's xml parser.
>>
>>
>>Thanks in advance,
>>Christopher Brichford
>>Acrobat Engineering
>>Adobe Systems Inc.
>>
> 
> 

-------------- next part --------------
import optparse
import win32com.client

if __name__ == u'__main__':
	usageStr = ( u'usage: %prog [options] xmlFileName ' )
	optParser = optparse.OptionParser( usage=usageStr )

	( options, args ) = optParser.parse_args()

	errorStr = u''
	if ( len( args ) < 1 ):
		errorStr = errorStr + u'Missing xml file name argument.'

	if ( len( errorStr ) > 0 ):
		raise Exception( errorStr )

	assert len( args ) > 0
	xmlFileName = args[ 0 ]
	
	#msXMLDOM = win32com.client.Dispatch( u'Msxml2.DOMDocument' )
	msXMLDOM = win32com.client.gencache.EnsureDispatch( u'Msxml2.DOMDocument' )
	assert msXMLDOM is not None
	msXMLDOM.load( xmlFileName )
-------------- next part --------------
Traceback (most recent call last):
  File "c:\Program Files\Python\2.4\lib\profile.py", line 611, in ?
    run('execfile(%r)' % (sys.argv[0],), options.outfile, options.sort)
  File "c:\Program Files\Python\2.4\lib\profile.py", line 72, in run
    prof = prof.run(statement)
  File "c:\Program Files\Python\2.4\lib\profile.py", line 448, in run
    return self.runctx(cmd, dict, dict)
  File "c:\Program Files\Python\2.4\lib\profile.py", line 454, in runctx
    exec cmd in globals, locals
  File "<string>", line 1, in ?
  File "profileTest.py", line 21, in ?
    msXMLDOM = win32com.client.gencache.EnsureDispatch( u'Msxml2.DOMDocument' )
  File "c:\Program Files\Python\2.4\lib\site-packages\win32com\client\gencache.py", line 536, in EnsureDispatch
    mod = EnsureModule(tla[0], tla[1], tla[3], tla[4], bForDemand=bForDemand)
  File "c:\Program Files\Python\2.4\lib\site-packages\win32com\client\gencache.py", line 520, in EnsureModule
    module = MakeModuleForTypelib(typelibCLSID, lcid, major, minor, progressInstance, bForDemand = bForDemand, bBuildHidden = bBuildHidden)
  File "c:\Program Files\Python\2.4\lib\site-packages\win32com\client\gencache.py", line 290, in MakeModuleForTypelib
    return GetModuleForTypelib(typelibCLSID, lcid, major, minor)
  File "c:\Program Files\Python\2.4\lib\site-packages\win32com\client\gencache.py", line 245, in GetModuleForTypelib
    def GetModuleForTypelib(typelibCLSID, lcid, major, minor):
  File "c:\Program Files\Python\2.4\lib\profile.py", line 238, in trace_dispatch_i
    if self.dispatch[event](self, frame, t):
  File "c:\Program Files\Python\2.4\lib\profile.py", line 295, in trace_dispatch_call
    assert (self.cur is None or \
AssertionError: ('Bad call', ('', 0, 'unlink'))
-------------- next part --------------
Traceback (most recent call last):
  File "c:\Program Files\Python\2.4\lib\profile.py", line 611, in ?
    run('execfile(%r)' % (sys.argv[0],), options.outfile, options.sort)
  File "c:\Program Files\Python\2.4\lib\profile.py", line 72, in run
    prof = prof.run(statement)
  File "c:\Program Files\Python\2.4\lib\profile.py", line 448, in run
    return self.runctx(cmd, dict, dict)
  File "c:\Program Files\Python\2.4\lib\profile.py", line 454, in runctx
    exec cmd in globals, locals
  File "<string>", line 1, in ?
  File "profileTest.py", line 21, in ?
    msXMLDOM = win32com.client.gencache.EnsureDispatch( u'Msxml2.DOMDocument' )
  File "c:\Program Files\Python\2.4\lib\site-packages\win32com\client\gencache.py", line 537, in EnsureDispatch
    GetModuleForCLSID(disp_clsid)
  File "c:\Program Files\Python\2.4\lib\site-packages\win32com\client\gencache.py", line 204, in GetModuleForCLSID
    def GetModuleForCLSID(clsid):
  File "c:\Program Files\Python\2.4\lib\profile.py", line 238, in trace_dispatch_i
    if self.dispatch[event](self, frame, t):
  File "c:\Program Files\Python\2.4\lib\profile.py", line 295, in trace_dispatch_call
    assert (self.cur is None or \
AssertionError: ('Bad call', ('c:\\Program Files\\Python\\2.4\\lib\\site-packages\\win32com\\client\\gencache.py', 368, 'EnsureModule'))


More information about the Python-win32 mailing list