Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过Python打开AutoCAD的新实例_Python_Python 2.7_Autocad_Autocad Plugin - Fatal编程技术网

通过Python打开AutoCAD的新实例

通过Python打开AutoCAD的新实例,python,python-2.7,autocad,autocad-plugin,Python,Python 2.7,Autocad,Autocad Plugin,有人有在AutoCAD中使用Python的经验吗?我只是想尝试一下,看看我是否可以通过Python打开一个新的AutoCAD实例,尽管PyAutocad工作得很好(如果您有任何建议,请随时提供其他建议) 无论如何,基于doc()——它说这些代码行应该可以做到这一点,但到目前为止还没有发生任何事情 从pyautocad导入Autocad,APoint acad=Autocad() acad.prompt(“您好,来自Python的Autocad\n”) 仅仅这些代码行就应该在命令行上生成信息,但

有人有在AutoCAD中使用Python的经验吗?我只是想尝试一下,看看我是否可以通过Python打开一个新的AutoCAD实例,尽管PyAutocad工作得很好(如果您有任何建议,请随时提供其他建议)

无论如何,基于doc()——它说这些代码行应该可以做到这一点,但到目前为止还没有发生任何事情

从pyautocad导入Autocad,APoint
acad=Autocad()
acad.prompt(“您好,来自Python的Autocad\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
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
acad.prompt(“你好,Autocad”)
文件“C:\Python27\lib\site packages\pyautocad\api.py”,第153行,在提示符中
self.doc.Utility.Prompt(u“%s\n”%text)
文件“C:\Python27\lib\site packages\pyautocad\api.py”,第65行,在文档中
返回self.app.ActiveDocument
文件“C:\Python27\lib\site packages\pyautocad\api.py”,第54行,在应用程序中
self.\u app=comtypes.client.GetActiveObject('AutoCAD.Application')
文件“C:\Python27\lib\site packages\comtypes\client\\uuuuu init\uuuuuu.py”,第180行,位于GetActiveObject中
obj=comtypes.GetActiveObject(clsid,interface=interface)
GetActiveObject中第1165行的文件“C:\Python27\lib\site packages\comtypes\\uuuuu init\uuuuu.py”
oledell.oleaut32.GetActiveObject(byref(clsid),None,byref(p))
文件“\u ctypes/callproc.c”,第941行,在GetResult中
WindowsError:[错误-2147221021]操作不可用
添加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'
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
acad.prompt(“你好”)
文件“C:\Python27\lib\site packages\pyautocad\api.py”,第153行,在提示符中
self.doc.Utility.Prompt(u“%s\n”%text)
文件“C:\Python27\lib\site packages\pyautocad\api.py”,第65行,在文档中
返回self.app.ActiveDocument
文件“C:\Python27\lib\site packages\pyautocad\api.py”,第54行,在应用程序中
self.\u app=comtypes.client.GetActiveObject('AutoCAD.Application')
GetActiveObject中的文件“C:\Python27\lib\site packages\comtypes\client\\uuuu init\uuuu.py”,第183行
返回管理(obj,clsid,接口=接口)
文件“C:\Python27\lib\site packages\comtypes\client\\uuuuu init\uuuuuu.py”,第188行,在\u manage中
obj=GetBestInterface(obj)
GetBestInterface中第112行的文件“C:\Python27\lib\site packages\comtypes\client\\uuuuu init\uuuuu.py”
接口=getattr(mod,itf_名称)
AttributeError:“模块”对象没有属性“IAcadApplication”
现在,在按照@reclosedev删除comtypes的“gen”文件夹后,Autocad现在打开,但文本字符串仍不会出现在命令行上-回溯显示:

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))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
acad.prompt(“你好”)
文件“C:\Python27\lib\site packages\pyautocad\api.py”,第153行,在提示符中
self.doc.Utility.Prompt(u“%s\n”%text)
文件“C:\Python27\lib\site packages\pyautocad\api.py”,第65行,在文档中
返回self.app.ActiveDocument
文件“C:\Python27\lib\site packages\pyautocad\api.py”,第59行,在应用程序中
self.\u app.Visible=self.\u Visible
文件“C:\Python27\lib\site packages\comtypes\client\dynamic.py”,第116行,在\uuu setattr中__
dispid=self.\u comobj.GetIDsOfNames(名称)[0]
文件“C:\Python27\lib\site packages\comtypes\automation.py”,第643行,位于GetIDsOfNames中
self.\uuu com\u GetIDsOfNames(riid\u null、arr、len(名称)、lcid、ID)
COMError:(-2147418111,‘呼叫被被叫方拒绝’,(无,无,无,0,无))

您考虑过IronPython吗

下面是如何利用它的一个快速示例:

import clr
import System

from System import Type, Activator

acApp = Activator.CreateInstance(Type.GetTypeFromProgID("AutoCAD.Application"))
acApp.Visible = 1
acApp.ActiveDocument.SendCommand("(Princ \"Hello World from Python!\")(Princ)\n")

显然,ProgId将与上次打开的AutoCAD版本相对应。

回溯将非常有用。我敢打赌,阅读此问题的大多数人都没有安装AutoCAD,因此他们无法测试您发布的代码。明白了,很抱歉-编辑后也进行了回溯。谢谢@Josephdunn您使用哪种版本的AutoCAD?确保它不是LT。此外,如果它高于2010,请确保您已安装。我使用的是2011-我将尝试安装VBA模块,看看是否有帮助。我假设comtypes软件包是使两者彼此兼容所需的唯一工具尝试删除comtypes缓存文件夹
C:\Python27\lib\site packages\comtypes\gen\
。如果AutoCAD尚未运行,则需要使用
create_If_not_exists=True
arg创建
AutoCAD
对象。我最终使用了VisualStudio,并通过C#编译了整件事情-也就是说,由于我正在进入另一个领域,我可能会使用VS2013插件跳回Python。谢谢你的回答@Locke!