import os import comtypes.client # change com_dir to whatever it is for you com_dir = r'C:\Program Files (x86)\ArcGIS\Desktop10.0\com' coms = [os.path.join(com_dir, x) for x in os.listdir(com_dir) if os.path.splitext(x)[1].upper() == '.OLB'] map(comtypes.client.GetModule, coms) # check add whatever you want here. import comtypes.gen.esriArcMapUI import comtypes.gen.esriGeodatabase print dir(comtypes.gen.esriArcMapUI)
import logging
# grab rootlogger
_loggy = logging.getLogger()
_loggy.setLevel(logging.DEBUG)
_loggy.addHandler(logging.FileHandler("derpdebug.log"))
import os
import comtypes.client
# change com_dir to whatever it is for you
com_dir = r'C:\Program Files (x86)\ArcGIS\Desktop10.0\com'
coms = [os.path.join(com_dir, x) for x in os.listdir(com_dir) if os.path.splitext(x)[1].upper() == '.OLB']
map(comtypes.client.GetModule, coms)
# check add whatever you want here.
import comtypes.gen.esriArcMapUI
import comtypes.gen.esriGeodatabase
print dir(comtypes.gen.esriArcMapUI)
Frank,
Thank you so much for your help. Your solutions worked like a charm. When I ran your script, the dir listed everything in the __dict__ of esriArcMapUI, as it should. esriArcMapUI.py was intact. With help from the person who wrote the example code that I used as a base, I have discovered that the comtypes generation of wrappers for ArcObjects occasionally fails, creating blank wrapper files. This seems to happen when a wrapper file already exists and GetModule() is called to build it again. I tested the wrapping process many more times, with both existing wrappers and a cleared out gen cache directory. I got a failure once, and that was for an existing wrapper. No failures for an empty cache. Also, the failures all produced readable but empty files. I have not encountered any instances of missing wrappers (where there should be one) or of corrupted, unreadable wrappers. I did also run your second, debug script quite a few times, and dir() reported as expected. The debug logs also showed no errors. So, I have modified my code to check for existing (the more secure open(filepath) way) wrappers and whether those existing modules are blank or not before I make any calls to GetModule(). Works great. I'll just be sure to rerun the wrapping process after ArcObjects updates. Thanks, again, Frank. I only wish I could give you some MVP points. Grrrr.
Cheers,
Ti
GIS Specialist
Durham, NH
import arcpy
import comtypes
import comtypes.client
import comtypes.gen.esriDataSourcesNetCDF
ws_factory = comtypes.client.CreateObject("esriDataSourcesNetCDF.NetCDFWorkspaceFactory", interface = esriDataSourcesNetCDF.INetCDFWorkspaceFactory)