Я пытаюсь извлечь экземпляр, чтобы указать на уже запущенное приложение AutoCAD 2016, или создать новый экземпляр, если он не запущен.
Вот простой пример кода:
#Import needed modules
import os
import comtypes.client
from comtypes import COMError
from comtypes.client import CreateObject, GetModule, GetActiveObject
try:
acad = GetActiveObject("AutoCAD.Application.20")
print "AutoCAD is Active"
print "########"
except(OSError, COMError): #If AutoCAD isn't running, run it
acad = CreateObject("AutoCAD.Application.20",dynamic=True)
print "AutoCAD is successfuly Opened"
print "########"
Когда AutoCAD не работает, функция CreateObject
работает успешно, и только если dynamic
установлен на true
.., но GetActiveObject
выдает ошибку трассировки
File "C:\Python27\lib\site-packages\comtypes\client\__init__.py", line 250, in CreateObject
return _manage(obj, clsid, interface=interface)
File "C:\Python27\lib\site-packages\comtypes\client\__init__.py", line 188, in _manage
obj = GetBestInterface(obj)
File "C:\Python27\lib\site-packages\comtypes\client\__init__.py", line 112, in GetBestInterface
interface = getattr(mod, itf_name)
AttributeError: 'module' object has no attribute 'IAcadApplication'
Я видел это , но без подсказки.
Также я вернулся к документации по комтипам, там написано
Функция GetActiveObject успешно выполняется, когда объект COM уже запущен, и зарегистрировалась в таблице запущенных объектов COM. Не все объекты COM делают это.
но это также не дает мне никакой подсказки.
P.S GetActiveObject
хорошо работает со мной с другими приложениями, такими как ETABS 2016 и SAP2000 v18
Любая помощь и проницательные ответы будут полностью оценены, заранее спасибо