Я хочу иметь объект, сгенерированный существующим скриптом MATLAB, смоделированный в FreeCAD. См. выделенные полужирным шрифтом заголовки для важного содержания Intro, кода Matlab, кода python, тестирования через терминал, ошибки Matlab, примечаний (ОС, версии)
Введение
Я проработал каждую сторону процесса, но у меня возникли проблемы с вызовом скрипта Python через MATLAB.
У меня есть и конструктор объектов, и скрипт, который работает при создании вещей в FreeCAD; так по существу, у меня есть любой конец. Что мне сейчас нужно, так это связать их.
Мой тест базовый, но его должно было быть достаточно, по крайней мере, я так предполагал.
Matlab:
pyfile = '~/Desktop/FreeCADworkspace/testvec2.py';
filename = 'atestname';
call = "python " + pyfile + " " + filename;
[status,result] = system("sh ~/Desktop/FreeCADworkspace/freecad.sh")
Питон:
# Import python roots
import sys
import os
sys.path.append('/usr/lib/freecad-python2/lib')
sys.path.append('/usr/lib/freecad/lib')
# Other imports
import numpy as np
import math
# Import FreeCAD and parts
import FreeCAD
from FreeCAD import Base
import Part, Sketcher, Draft
try:
filename = sys.argv[1]
except: # this should never be thrown, exists for testing and other integration
print('No arguments called into script.')
print('Please use format: python thisScript.py arg_filename')
quit() # exit script
print(filename) # checkmeplz
Итак, по сути, что должно произойти, так это то, что я должен получить распечатку определения filename в MATLAB. В этом случае я должен увидеть 'atestname'
Тестирование
Если я вызову это через терминал:
python ~/Desktop/FreeCADworkspace/testvec2.py atestname
Я получил:
FreeCAD 0.18.1, Libs: 0.18.1R
atestname
Что именно так и ожидалось. Чего нельзя сказать о моем MATLAB.
ОШИБКА MATLAB
Traceback (most recent call last):
File "/home/ashaiden/Desktop/FreeCADworkspace/testvec2.py", line 11, in <module>
import FreeCAD # no FreeCADGui??
ImportError: /usr/lib/freecad-python2/lib/libFreeCADBase.so: undefined symbol: _ZN11xercesc_3_111InputSource11setEncodingEPKt
Я также пытался выполнить скрипт python из MATLAB через скрипт bash. Та же ошибка.
Что меня смущает: почему какая-то команда, которая отлично выполняется через терминал, не работает при вызове через MATLAB? Я чувствую, что неправильно понимаю, как выполняются системные вызовы MATLAB. Я предположил, что вызов был отправлен и обработан самой ОС. Но в этом случае не было бы смысла получать ошибку. Выполняет ли MATLAB интерпретацию обрабатываемых файлов?
Примечания
- Операционная система: Ubuntu 16.04
- МАТЛАБ 2018b
- Python 2.7 -> это потенциально проблема? Python 2, похоже, был языком по умолчанию для моей конкретной установки FreeCAD.
- FreeCAD 0.18.1
Изменить
После долгих поисков, проведенных мной и моим руководителем, оказалось, что это можно объяснить конфликтом между двоичными файлами.
В MATLAB есть файлы libxerces-c.so, определенные внутри /bin/glnxa64/ и еще одна папка панели инструментов.
Они могут конфликтовать с бинарным файлом Linux /usr/lib/x86_64-linux-gnu/libxerces-c.so, так что когда терминал вызывается через Matlab, он использует бинарный файл Matlab вместо системы. двоичный.
Я продолжу расследование дальше.