Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

Вот что я хотел бы использовать вместо этого, чтобы изящно обрабатывать ошибки из 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"

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

Ответ 4

В 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 в противном случае.

Ответ 5

Вот шаги:

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

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

Ответ 6

cat 1.m | matlab -nodesktop -nosplash

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

Ответ 7

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

Ответ 8

Начиная с R2019b, появилась новая опция командной строки, -batch. Он заменяет -r, который больше не рекомендуется. Он также унифицирует синтаксис на разных платформах. См., Например, документацию для Windows, для других платформ описание идентично.

matlab -batch "statement to run"

Это запускает MATLAB без рабочего стола или заставки, регистрирует все выходные данные в stdout и stderr, автоматически завершает работу после завершения оператора и предоставляет код завершения, сообщающий об успехе или ошибке.

Таким образом, больше нет необходимости использовать try/catch вокруг кода для запуска, и больше нет необходимости добавлять оператор exit.

Ответ 9

Я запускаю эту команду в скрипте bash, в частности, для отправки заданий SGE и процессов пакетной обработки:

/Path_to_matlab -nodisplay -nosplash -nodesktop < m_file.m

Ответ 10

Поскольку ни один из ответов не содержит информацию о вводе входного аргумента, важно добавь это сюда. После некоторых исследований я нашел эту ссылку

Подача аргументов очень похожа на то, как мы запускаем функцию Matlab.

matlab -r 'try myfunction(argument1,argument2); catch; end; quit'

Если вы как-то получаете аргумент из bash/терминал, вам просто нужно вставить его в команду bash следующим образом:

matlab -r 'try myfunction($MY_BASH_ARG,argument2); catch; end; quit'

(это после пары проб и ошибок)