xlabel - Matlab: ejecutando un m-file desde la línea de comandos
tag plot matlab (7)
Aquí es lo que usaría en su lugar, para manejar correctamente los errores del 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"
Si quieres más verbosidad:
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"
Encontré la referencia original here .
Suponer que;
Tengo un archivo m en la ubicación:
C:/M1/M2/M3/mfile.m
Y el archivo exe del matlab está en esta ubicación:
C:/E1/E2/E3/matlab.exe
Quiero ejecutar este archivo m con Matlab, desde la línea de comandos, por ejemplo, dentro de un archivo .bat. ¿Cómo puedo hacer esto? ¿Hay alguna manera de hacerlo?
Creo que un punto importante que no se mencionó en las respuestas anteriores es que, si no se indica explícitamente, el intérprete de matlab permanecerá abierto. Por lo tanto, a la respuesta de @hkBattousai agregaré el comando de exit
:
"C:/<a long path here>/matlab.exe" -nodisplay -nosplash -nodesktop -r "run(''C:/<a long path here>/mfile.m'');exit;"
En Linux puede hacer lo mismo y puede enviar de nuevo al shell un código de error personalizado, como el siguiente:
#!/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: $?"
imprime el matlab exit code: 1
si el script arroja una excepción, matlab exit code: 0
caso contrario.
Estos son los pasos:
- Comience la línea de comando.
- Ingrese la carpeta que contiene el archivo .m con
cd C:/M1/M2/M3
- Ejecute lo siguiente:
C:/E1/E2/E3/matlab.exe -r mfile
Los sistemas Windows usarán su carpeta actual como la ubicación para que MATLAB busque archivos .m, y la opción -r
intentará iniciar el archivo .m dado tan pronto como se inicie.
Gracias a malat. Tu comment me ayudó. Pero quiero agregar mi bloque try-catch, ya que encontré el método getReport()
que devuelve el mensaje de error completo y lo imprime en la consola de matlab.
Además, imprimí el nombre del archivo ya que esta compilación forma parte de un script por lotes que llama a matlab.
try
some_code
...
catch message
display([''ERROR in file: '' message.stack.file])
display([''ERROR: '' getReport(message)])
end;
Para un nombre de modelo falso pasado al método de generación de código heredado, el resultado sería:
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 '';'']);
Finalmente, para mostrar el resultado en la ventana del símbolo del sistema de Windows, simplemente inicie sesión en la consola de matlab en un archivo con -logfile logfile.txt
archivo de -logfile logfile.txt
(use adicionalmente -wait
) y llame al comando de lote type logfile.txt
Un comando como este ejecuta correctamente el archivo m:
"C:/<a long path here>/matlab.exe" -nodisplay -nosplash -nodesktop -r "run(''C:/<a long path here>/mfile.m'');"
cat 1.m | matlab -nodesktop -nosplash
Y uso Ubuntu