Matlab: запуск m-файла из командной строки

73

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

У меня есть m файл в местоположении:
C:\M1\M2\M3\mfile.m

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

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

Теги:
automation
command-line

7 ответов

82
Лучший ответ

Команда вроде этого успешно запускает файл m:

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

  • 0
    Еще один похожий вопрос здесь, чтобы ответить: stackoverflow.com/questions/25102699/…
  • 5
    Было бы хорошо, если бы вы добавили команду «выход» в конце, чтобы сделать ваш ответ более практичным и полезным.
Показать ещё 3 комментария
52

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

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

  • 5
    По какой-то причине, если mfile.m вызывает ошибку, явная функция exit никогда не вызывается, что заставляет весь процесс ждать ...
22

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

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"

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

13

В 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, если script выдает исключение, matlab exit code: 0 в противном случае.

  • 1
    Чтобы отобразить ошибку как MATLAB, когда она не перехватывается, просто выполните "try, run('/foo/bar/my_script.m'), catch e, disp(getReport(e)), exit(1), end, exit(0);"
11

Вот шаги:

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

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

  • 1
    Он не будет работать внутри файла .bat. Я привел это в качестве примера. На самом деле, я буду запускать его с помощью функции Win32 API CreateProcessW() .
6
cat 1.m | matlab -nodesktop -nosplash

И я использую Ubuntu

5

Благодаря малату. Ваш комментарий помог мне. Но я хочу добавить блок try-catch, так как нашел метод MExeption getReport(), который возвращает все сообщение об ошибке и печатает его в консоли matlab.

Кроме того, я напечатал имя файла, поскольку эта компиляция является частью пакета script, который вызывает 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню