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



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



у меня есть m-файл на месте:
C:M1M2M3mfile.m



и exe файл matlab находится по этому адресу:
C:E1E2E3matlab.exe



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

839   7  

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

вот шаги:

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

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

cat 1.m | matlab -nodesktop -nosplash

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

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

Comments

    Ничего не найдено.