Matlab: запуск m-файла из командной строки - PullRequest
92 голосов
/ 12 июля 2011

Предположим, что;

У меня есть m-файл по адресу:
C:\M1\M2\M3\mfile.m

И exe-файл matlab находится по этому адресу:
C:\E1\E2\E3\matlab.exe

Я хочу запустить этот m-файл с Matlab из командной строки, например, внутри файла .bat. Как я могу это сделать, есть ли способ сделать это?

Ответы [ 7 ]

94 голосов
/ 16 июля 2011

Такая команда успешно запускает m-файл:

"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m');"

65 голосов
/ 07 апреля 2013

Я думаю, что одним важным моментом, который не был упомянут в предыдущих ответах, является то, что, если не указано иное, интерпретатор Matlab останется открытым. Поэтому к ответу @hkBattousai добавлю команду exit:

"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m');exit;"

39 голосов
/ 14 сентября 2015

Вот что я бы использовал вместо этого, чтобы изящно обрабатывать ошибки из скрипта:

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"

Я нашел оригинальную ссылку здесь .

25 голосов
/ 31 марта 2016

В 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 иначе.

13 голосов
/ 12 июля 2011

Вот шаги:

  1. Запустить командную строку.
  2. Введите папку, содержащую файл .m с помощью cd C:\M1\M2\M3
  3. Запустите следующее: C:\E1\E2\E3\matlab.exe -r mfile

Системы Windows будут использовать вашу текущую папку в качестве местоположения MATLAB для поиска файлов .m, а опция -r пытается запустить указанный файл .m, как только произойдет запуск.

10 голосов
/ 03 декабря 2016
cat 1.m | matlab -nodesktop -nosplash

А я пользуюсь Ubuntu

7 голосов
/ 23 июня 2016

Благодаря малату. Ваш комментарий помог мне. Но я хочу добавить свой блок 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) и вызовите пакетную команду type logfile.txt

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...