У меня проблема с тем, как 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, но во фляге разрешает только один раз.
Есть предложения? Я не знаю, если это то место, где можно получить такую помощь, хахахаха.
Спасибо!