Предположим, что;
У меня есть m-файл по адресу:
C:\M1\M2\M3\mfile.m
И exe-файл Matlab находится в этом месте:
C:\E1\E2\E3\matlab.exe
Я хочу запустить этот m-файл с помощью Matlab из командной строки, например, внутри файла .bat. Как я могу это сделать, есть ли способ это сделать?
matlab
command-line
automation
hkBattousai
источник
источник
Ответы:
Подобная команда успешно запускает m-файл:
"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m'); exit;"
источник
Я думаю, что один важный момент, который не был упомянут в предыдущих ответах, заключается в том, что, если это явно не указано, интерпретатор Matlab останется открытым. Поэтому к ответу @hkBattousai добавлю
exit
команду:"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m');exit;"
источник
mfile.m
вызывает ошибку, явнаяexit
функция никогда не вызывается, заставляя весь процесс ждать ...Вот что я бы использовал вместо этого, чтобы изящно обрабатывать ошибки из скрипта:
Если вы хотите больше подробностей:
Я нашел оригинальную ссылку здесь . Поскольку исходной ссылки больше нет, вот ссылка на альтернативную программу чтения, которая все еще существует:
источник
В Linux вы можете сделать то же самое, и вы действительно можете отправить обратно в оболочку собственный код ошибки, например следующий:
он печатает,
matlab exit code: 1
если сценарий генерирует исключение, вmatlab exit code: 0
противном случае.источник
"try, run('/foo/bar/my_script.m'), catch e, disp(getReport(e)), exit(1), end, exit(0);"
Вот шаги:
cd C:\M1\M2\M3
C:\E1\E2\E3\matlab.exe -r mfile
Системы Windows будут использовать вашу текущую папку в качестве местоположения для MATLAB для поиска файлов .m, и
-r
опция пытается запустить данный файл .m, как только происходит запуск.источник
CreateProcessW()
.И я использую Ubuntu
источник
Благодаря малату. Ваш комментарий мне помог. Но я хочу добавить свой блок try-catch, так как нашел
MExeption
метод,getReport()
который возвращает все сообщение об ошибке и выводит его на консоль Matlab.Кроме того, я напечатал имя файла, так как эта компиляция является частью пакетного сценария, который вызывает Matlab.
Для ложного имени модели, переданного в метод генерации устаревшего кода, результат будет выглядеть так:
Наконец, чтобы отобразить вывод в окне командной строки Windows, просто зарегистрируйте консоль matlab в файл с помощью
-logfile logfile.txt
(используйте дополнительно-wait
) и вызовите пакетную командуtype logfile.txt
источник
Начиная с R2019b, появился новый параметр командной строки
-batch
. Он заменяет-r
, что больше не рекомендуется. Он также унифицирует синтаксис для разных платформ. См., Например, документацию для Windows , для других платформ описание идентично.Это запускает MATLAB без рабочего стола или экрана-заставки, регистрирует весь вывод в
stdout
иstderr
, выходит автоматически, когда оператор завершается, и предоставляет код выхода, сообщающий об успехе или ошибке.Таким образом, больше нет необходимости использовать
try
/catch
вокруг кода для запуска, и больше нет необходимости добавлятьexit
оператор.источник
Я запускаю эту команду в сценарии bash, в частности, для отправки заданий SGE и пакетной обработки:
источник
Поскольку ни в одном из ответов нет информации о входном аргументе подачи, важно добавить его здесь. После некоторого исследования я нашел эту ссылку
Подача аргументов очень похожа на то, как мы запускаем функцию Matlab.
Если вы каким-то образом получаете аргумент от bash / terminal, вам просто нужно вставить его в команду bash как:
(Это после пары проб и ошибок)
источник