Matlab: запуск m-файла из командной строки
предположим, что;
у меня есть m-файл на месте:C:M1M2M3mfile.m
и exe файл matlab находится по этому адресу:C:E1E2E3matlab.exe
Я хочу запустить этот m-файл с Matlab, из командной строки, например, внутри a .Bat-файл. Как я могу это сделать, есть ли способ сделать это?
7 ответов:
такая команда успешно запускает m-файл:
"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m');"
Я думаю, что один важный момент, который не был упомянут в предыдущих ответах, заключается в том, что, если явно не указано, интерпретатор matlab останется открытым. Поэтому, чтобы ответ от @hkBattousai я добавить :
"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m');exit;"
вот что я бы использовал вместо этого, чтобы изящно обрабатывать ошибки из скрипта:
C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "try, run('C:\<a long path here>\mfile.m'), catch, exit, end, exit"Если вы хотите получить больше детализации:
C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "try, run('C:\<a long path here>\mfile.m'), catch me, fprintf('%s / %s\n',me.identifier,me.message), end, exit"Я нашел исходную ссылку здесь.
в Linux вы можете сделать то же самое, и вы можете отправить обратно в оболочку пользовательский код ошибки, например:
#!/bin/bash matlab -nodisplay -nojvm -nosplash -nodesktop -r \ "try, run('/foo/bar/my_script.m'), catch, exit(1), end, exit(0);" echo "matlab exit code: $?"печати
matlab exit code: 1если скрипт выдает исключение,matlab exit code: 0в противном случае.
вот шаги:
- Запустите командную строку.
- укажите папку, содержащую .файл м с
cd C:\M1\M2\M3- выполнить следующее:
C:\E1\E2\E3\matlab.exe -r mfileсистемы Windows будут использовать ваш текущей папки как место для поиска MATLAB .файлы м, а
-rопция пытается запустить данный .M файл, как только происходит запуск.
спасибо малат. Ваш комментарий помог мне. Но я хочу добавить свой блок try-catch, так как я нашел
MExeptionметодgetReport()Это возвращает все сообщение об ошибке и выводит его на консоль matlab.кроме того, я напечатал имя файла, поскольку эта компиляция является частью пакетного сценария, который вызывает matlab.
try some_code ... catch message display(['ERROR in file: ' message.stack.file]) display(['ERROR: ' getReport(message)]) end;для ложного имени модели, переданного в метод генерации устаревшего кода, вывод будет выглядеть так:
ERROR in file: C:\..\..\.. ERROR: Undefined function or variable 'modelname'. Error in sub-m-file (line 63) legacy_code( 'slblock_generate', specs, modelname); Error in m-file (line 11) sub-m-file Error in run (line 63) evalin('caller', [script ';']);наконец, отображение вывода в окне командной строки windows, просто войдите в консоль matlab в файл с
-logfile logfile.txt(использовать дополнительно-wait) и вызов команды batchtype logfile.txt
Comments