使用python 2.7中的comtypes获取正在运行的AutoCAD应用程序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用python 2.7中的comtypes获取正在运行的AutoCAD应用程序相关的知识,希望对你有一定的参考价值。
我正在尝试获取一个实例以指向已经运行的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:Python27libsite-packagescomtypesclient\__init__.py", line 250, in CreateObject
return _manage(obj, clsid, interface=interface)
File "C:Python27libsite-packagescomtypesclient\__init__.py", line 188, in _manage
obj = GetBestInterface(obj)
File "C:Python27libsite-packagescomtypesclient\__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:Python27Libsite-packagescomtypesgen
,然后删除这4个文件:
- AutoCAD.朋友
- AutoCAD.pyc
- _4E3F492A_FB57_4439_9bf0_1567Ed84A3A9_0_1_0.朋友
- _4E3F492A_FB57_4439_9BF0_1567ED84A3A9_0_1_0.pyc
您可以注意到,最后2个文件由AutoCAD.py文件中提到的相同的等效生成符号命名。
以上是关于使用python 2.7中的comtypes获取正在运行的AutoCAD应用程序的主要内容,如果未能解决你的问题,请参考以下文章
linux下输入python setup.py install(安装comtypes-0.6.2),出错。
我的元组中的那些小“u”是啥? (python 2.7)[重复]