Python — ошибка взаимодействия с флажковыми маршрутами и приложением Windows (AUTOCAD)

avatar
Rafael Barlera
8 августа 2021 в 20:25
80
0
0

У меня проблема с тем, как Python взаимодействует с другими приложениями в Windows, в данном случае это AUTOCAD.

У меня есть простой скрипт для записи строки в AutoCAD и отправки сообщения ok.

import pyautocad

from pyautocad.types import aDouble

acad.prompt('ok')
points = aDouble(0,0,1,1,2,2)
acad.model.AddPolyline(points)

Все работает нормально, когда я запускаю этот скрипт. Но я хотел бы иметь маршрут, чтобы сделать это. Итак, я установил flask и создал небольшое приложение flask, показанное ниже:

приложение/__init.py

from flask import Flask
from environs import Env


from app.views.vigas import bp_vigas

def create_app():
    env = Env
    app = Flask(__name__)

    app.register_blueprint(bp_vigas)

    return app

приложение/сервисы/viga.py

import pyautocad
from pyautocad.types import aDouble
from pythoncom import CoInitialize

acad = pyautocad.Autocad() 

def testeAcad():
    CoInitialize()
    acad.prompt('ok')
    points = aDouble(0,0,1,1,2,2)
    acad.model.AddPolyline(points)
    

app/views/vigas.py

from flask import Blueprint, request

from app.services.vigas import testeAcad

bp_vigas = Blueprint('bp_vigas', __name__, url_prefix='/viga')

@bp_vigas.route('/teste', methods=['GET'])
def list_all():
    testeAcad()
    return 'ok'

Примечание 1. Ранее возникала ошибка, которую я решил с помощью CoInitialize, но я не уверен, как работает CoInitialize.

Хорошо, при запросе этого маршрута возвращается ok, и все идет хорошо, но если я запускаю маршрут еще раз, возникает ошибка. При перезапуске сервера возникает та же ошибка. В первый запрос идет нормально, но следующий запрос снова поднимает ту же ошибку.

_ctypes.COMError _ctypes.COMError: (-2147220995, «Объект не подключен к серверу», (Нет, Нет, Нет, 0, Нет))

Трассировка (последний последний вызов) Файл "C:\Users\Rafael\Desktop\pyautocad\venv\Lib\site-packages\flask\app.py", строка 2088, в call return self.wsgi_app(environ, start_response) Файл "C:\Users\Rafael\Desktop\pyautocad\venv\Lib\site-packages\flask\app.py", строка 2073, в ответе wsgi_app = файл self.handle_exception(e) "C:\Users\Rafael\Desktop\pyautocad\venv\Lib\site-packages\flask\app.py", строка 2070, в файле wsgi_app response = self.full_dispatch_request() "C:\Users\Rafael\Desktop\pyautocad\venv\Lib\site-packages\flask\app.py", строка 1515, в full_dispatch_request rv = self.handle_user_exception(e) Файл "C:\Users\Rafael\Desktop\pyautocad\venv\Lib\site-packages\flask\app.py", строка 1513, в файле full_dispatch_request rv = self.dispatch_request() "C:\Users\Rafael\Desktop\pyautocad\venv\Lib\site-packages\flask\app.py", строка 1499, в ответе dispatch_request self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args) Файл "C:\Users\Rafael\Desktop\pyautocad\app\views\vigas.py", строка 9, в файле list_all testeAcad() "C:\Users\Rafael\Desktop\pyautocad\app\services\vigas.py", строка 11, в Файл testeAcad acad.prompt('ok') "C:\Users\Rafael\Desktop\pyautocad\venv\Lib\site-packages\pyautocad\api.py", строка 162, в приглашении файл self.doc.Utility.Prompt(u"%s\n" % text) "C:\Users\Rafael\Desktop\pyautocad\venv\Lib\site-packages\pyautocad\api.py", строка 74, в документе return self.app.ActiveDocument File "C:\Users\Rafael\Desktop\pyautocad\venv\Lib\site-packages\comtypes\client\lazybind.py", строка 168, в getattr return self._comobj._invoke(descr.memid, descr.invkind, 0) Файл "C:\Users\Rafael\Desktop\pyautocad\venv\Lib\site-packages\comtypes\automation.py", строка 728, в _invoke self.__com_Invoke(memid, riid_null, lcid, инвкинд, _ctypes.COMError: (-2147220995, 'Объект не подключен к серверу', (Нет, Нет, Нет, 0, Нет))

Эта ошибка аналогична ошибке, когда я отправляю что-то неправильное в функции acad.

Но это происходит только на моих маршрутах, потому что, если я запускаю скрипт более одного раза, он нормально пишет в autocad, но во фляге разрешает только один раз.

Есть предложения? Я не знаю, если это то место, где можно получить такую ​​​​помощь, хахахаха.

Спасибо!

Источник

Ответы (0)