通过Python打开一个新的AutoCAD实例

3

有没有人使用Python和AutoCAD的经验?我只是在试验中想通过Python打开一个新的AutoCAD实例,并发现PyAutocad运行良好(如果你有其他建议,请随意提供)。

根据文档(https://pypi.python.org/pypi/pyautocad/#downloads) - 它说这些代码应该可以做到,但目前还没有任何反应。

from pyautocad import Autocad, APoint
acad = Autocad()
acad.prompt("Hello, Autocad from Python\n")

只需要这些代码,就应该在命令行上生成信息,但实际上会导致大约50行的回溯(如果有人感兴趣,我也可以发布),有什么想法吗?

Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
acad.prompt("Hello, Autocad")
File "C:\Python27\lib\site-packages\pyautocad\api.py", line 153, in prompt
self.doc.Utility.Prompt(u"%s\n" % text)
File "C:\Python27\lib\site-packages\pyautocad\api.py", line 65, in doc
return self.app.ActiveDocument
File "C:\Python27\lib\site-packages\pyautocad\api.py", line 54, in app
self._app = comtypes.client.GetActiveObject('AutoCAD.Application')
File "C:\Python27\lib\site-packages\comtypes\client\__init__.py", line 180, in GetActiveObject
obj = comtypes.GetActiveObject(clsid, interface=interface)
File "C:\Python27\lib\site-packages\comtypes\__init__.py", line 1165, in GetActiveObject
oledll.oleaut32.GetActiveObject(byref(clsid), None, byref(p))
File "_ctypes/callproc.c", line 941, in GetResult
WindowsError: [Error -2147221021] Operation unavailable

添加了VBA模块后,回溯现在显示:
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    acad.prompt("Hello")
  File "C:\Python27\lib\site-packages\pyautocad\api.py", line 153, in prompt
    self.doc.Utility.Prompt(u"%s\n" % text)
  File "C:\Python27\lib\site-packages\pyautocad\api.py", line 65, in doc
    return self.app.ActiveDocument
  File "C:\Python27\lib\site-packages\pyautocad\api.py", line 54, in app
    self._app = comtypes.client.GetActiveObject('AutoCAD.Application')
  File "C:\Python27\lib\site-packages\comtypes\client\__init__.py", line 183, in GetActiveObject
    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'

现在按照@reclosedev的建议删除了comtypes的“gen”文件夹,虽然Autocad现在已经打开了,但是字符串文本仍然无法显示在命令行上 - traceback读取如下:
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    acad.prompt("Hello")
  File "C:\Python27\lib\site-packages\pyautocad\api.py", line 153, in prompt
    self.doc.Utility.Prompt(u"%s\n" % text)
  File "C:\Python27\lib\site-packages\pyautocad\api.py", line 65, in doc
    return self.app.ActiveDocument
  File "C:\Python27\lib\site-packages\pyautocad\api.py", line 59, in app
    self._app.Visible = self._visible
  File "C:\Python27\lib\site-packages\comtypes\client\dynamic.py", line 116, in __setattr__
    dispid = self._comobj.GetIDsOfNames(name)[0]
  File "C:\Python27\lib\site-packages\comtypes\automation.py", line 643, in GetIDsOfNames
    self.__com_GetIDsOfNames(riid_null, arr, len(names), lcid, ids)
COMError: (-2147418111, 'Call was rejected by callee.', (None, None, None, 0, None))

抱歉,我编辑后加上了回溯信息。谢谢@JosephDunn。 - prestonsmith
1
你使用的是哪个版本的AutoCAD?请确保不是LT版本。另外,如果高于2010,请确保已安装AutoCAD VBA模块 - reclosedev
我之前一直在使用2011版本 - 我会尝试安装VBA模块,看看是否有所帮助。我曾经认为comtypes包是使它们兼容的唯一必需品。 - prestonsmith
按照@reclosedev的建议,我添加了VBA模块,这改变了回溯消息 - 现在它说缺少另一个名为“IAcadApplication”的模块 - 还有更多想法吗? - prestonsmith
1
尝试删除comtypes缓存文件夹“C:\ Python27 \ lib \ site-packages \ comtypes \ gen \”。如果AutoCAD尚未运行,则需要使用“create_if_not_exists = True”参数创建“Autocad”对象。 - reclosedev
显示剩余2条评论
1个回答

2

我最终使用VisualStudio并通过C#编译整个项目 - 话虽如此,由于我正在进入另一个领域,我可能会再次使用带有VS2013插件的Python。不过还是感谢@Locke的回答! - prestonsmith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接