我正在尝试获取一个实例以指向已经运行的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
抛出Traceback错误
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'
我见过this,但没有任何线索。
此外,我已经回到了comtypes的文档,它说
当COM对象已在运行时,GetActiveObject函数成功,并已在COM运行对象表中注册自身。并非所有COM对象都执行此操作。
但这也没有给我任何线索。
P.Sazxswpoi与我一起使用ETABS 2016和SAP2000 v18等其他应用程序
任何帮助和有见地的回应将完全被感谢,提前感谢
这很奇怪,但它确实有效(至少对我而言)
我去了GetActiveObject
文件夹,它的完整路径是gen
,然后查找文件AutoCAD.py,在IDLE中打开它,知道它等效生成的符号(ID),如C:\Python27\Lib\site-packages\comtypes\gen
,然后删除这4个文件:
您可以注意到,最后2个文件由AutoCAD.py文件中提到的相同的等效生成符号命名。