Запустить приложение от Matlab

Я ищу способ запустить приложение из Matlab. Дело в том, что мой скрипт Matlab сохраняет некоторые результаты в файл, который затем должен быть открыт в соответствующем приложении (в этом случае Blender).

Я знаком с командами вроде

system('program_name') 

или

 !program_name 

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

 >> !blender blender: /usr/local/MATLAB/R2011a/sys/os/glnx86/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by blender) 

Есть ли способ запустить приложение, в котором используется глобальная (система) PATH?

Минуту назад я подумал, что нашел настройку, а именно запуск терминала изнутри Matlab с некоторыми аргументами (Blender filename.blend).

 system('terminal -x blender /home/pieter/Red.blend') 

Это работало пару раз, но теперь я получаю ошибки после выполнения этой команды 20 раз или около того …

 >> system('terminal -x blender /home/pieter/Red.blend') (terminal:10982): GLib-CRITICAL **: PCRE library is compiled without UTF8 support (terminal:10982): Terminal-CRITICAL **: Failed to parse regular expression pattern 0: PCRE library is compiled without UTF8 support 

Кстати, я использую Arch Linx.


Изменить :

Ну, я просто подумал о довольно грязном решении. Matlab использует переменную окружения

 LD_LIBRARY_PATH 

Для путей к необходимым библиотекам:

 getenv('LD_LIBRARY_PATH') /usr/local/MATLAB/R2011a/sys/os/glnx86:/usr/local/MATLAB/R2011a/bin/glnx86:/usr/local/MATLAB/R2011a/extern/lib/glnx86:/usr/local/MATLAB/R2011a/runtime/glnx86:/usr/local/MATLAB/R2011a/sys/java/jre/glnx86/jre/lib/i386/native_threads:/usr/local/MATLAB/R2011a/sys/java/jre/glnx86/jre/lib/i386/client:/usr/local/MATLAB/R2011a/sys/java/jre/glnx86/jre/lib/i386 

Поэтому я мог бы сохранить эту информацию в переменной (например, MatlabPath ):

 MatlabPath = getenv('LD_LIBRARY_PATH') 

а затем, прежде чем я позвоню в блендер, сделайте следующее:

 setenv('LD_LIBRARY_PATH',getenv('PATH')) 

Что делает Matlab использовать мои системные библиотеки. Затем, после запуска программы, повторно назначьте старое значение LD_LIBRARY_PATH:

 setenv('LD_LIBRARY_PATH',MatlabPath) 

Итак … это решение, но если кто-нибудь знает более чистый способ решения проблемы, дайте мне знать.

Как я указал в моем Редактировании выше, это может быть решением:

 % Save library paths MatlabPath = getenv('LD_LIBRARY_PATH'); % Make Matlab use system libraries setenv('LD_LIBRARY_PATH',getenv('PATH')) disp('Starting Blender...') system( ['blender ', Directory, FileName, '.blend'] ) % Reassign old library paths setenv('LD_LIBRARY_PATH',MatlabPath) 

Однако, с другой стороны, чтобы запустить приложение, вы можете сразу вернуться в Matlab после его запуска:

 % Start Blender and immediately return to Matlab !blender Geometry.blend & 

Амперсанд ( & ) является ключом к немедленному возврату в Matlab после запуска приложения, но запуск Blender таким образом я не могу предоставить переменную FileName, как я могу сделать с системой (…) .

Итак, кто-нибудь понял, как

  • use ! program_name с переменным именем файла

    или

  • (имя_программы) с такой опцией, что Matlab только запускает приложение (и не ждет с возвратом, пока приложение не будет закрыто)

Просто запустите команду в MATLAB :

setenv (‘LD_LIBRARY_PATH’, [getenv (‘PATH’) getenv (‘LD_LIBRARY_PATH’)])

Он добавляет библиотеку Matlab в системную библиотеку.

Фактически вы можете удалить LD_LIBRARY_PATH в системном вызове, например:

 system('LD_LIBRARY_PATH=; blender'); 

(Обратите внимание, что это, скорее всего, зависит от командного синтаксиса оболочки, запущенной внутри MATLAB. Вышеуказанное должно работать для Bash).