Получите работающее приложение AutoCAD, используя comtypes в Python 2.7 - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь извлечь экземпляр, чтобы указать на уже запущенное приложение 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

Любая помощь и проницательные ответы будут полностью оценены, заранее спасибо

1 Ответ

0 голосов
/ 01 сентября 2018

Это странно, но работает (по крайней мере, у меня)

Я перешел в папку gen, ее полный путь - C:\Python27\Lib\site-packages\comtypes\gen, затем искал файл AutoCAD.py, открыл его в IDLE, знал его эквивалентный сгенерированный символ (ID), такой как _4E3F492A_FB57_4439_9BF0_1567ED84A3A9_0_1_0, затем удалил эти 4 файла:

  1. AutoCAD.py
  2. AutoCAD.pyc
  3. _4E3F492A_FB57_4439_9BF0_1567ED84A3A9_0_1_0.py
  4. _4E3F492A_FB57_4439_9BF0_1567ED84A3A9_0_1_0.pyc

Вы можете заметить, что последние 2 файла имеют одинаковый сгенерированный символ, который упоминается в файле AutoCAD.py.

...