Suponer que;
Tengo un archivo m en la ubicación:
C:\M1\M2\M3\mfile.m
Y el archivo exe de 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?
matlab
command-line
automation
hkBattousai
fuente
fuente
Respuestas:
Un comando como este ejecuta el archivo-m con éxito:
"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m'); exit;"
fuente
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
exit
comando:"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m');exit;"
fuente
mfile.m
activa un error, laexit
función explícita nunca se llama, lo que hace que todo el proceso espere ...Esto es lo que usaría en su lugar, para manejar con gracia los errores del script:
Si quieres más verbosidad:
Encontré la referencia original aquí . Dado que el enlace original ya no existe, aquí está el enlace a un nuevo lector alternativo que sigue vivo hoy:
fuente
En Linux puede hacer lo mismo y puede enviar de vuelta al shell un código de error personalizado, como el siguiente:
se imprime
matlab exit code: 1
si el script arroja una excepción, de lomatlab exit code: 0
contrario.fuente
"try, run('/foo/bar/my_script.m'), catch e, disp(getReport(e)), exit(1), end, exit(0);"
Estos son los pasos:
cd C:\M1\M2\M3
C:\E1\E2\E3\matlab.exe -r mfile
Los sistemas Windows utilizarán su carpeta actual como ubicación para que MATLAB busque archivos .m, y la
-r
opción intenta iniciar el archivo .m dado tan pronto como se inicie.fuente
CreateProcessW()
.Y yo uso Ubuntu
fuente
Gracias a malat. Tu comentario me ayudó. Pero quiero agregar mi bloque try-catch, ya que encontré el
MExeption
métodogetReport()
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 es parte de un script por lotes que llama a matlab.
Para un nombre de modelo falso pasado al método de generación de código heredado, la salida se vería así:
Finalmente, para mostrar la salida en la ventana del símbolo del sistema de Windows, simplemente registre la consola de matlab en un archivo con
-logfile logfile.txt
(use adicionalmente-wait
) y llame al comando por lotestype logfile.txt
fuente
Desde R2019b, hay una nueva opción de línea de comandos,
-batch
. Reemplaza-r
, que ya no se recomienda. También unifica la sintaxis entre plataformas. Vea por ejemplo la documentación para Windows , para las otras plataformas la descripción es idéntica.Esto inicia MATLAB sin el escritorio o la pantalla de presentación, registra todos los resultados en
stdout
ystderr
, sale automáticamente cuando se completa la declaración y proporciona un código de salida que informa el éxito o el error.Por lo tanto, ya no es necesario usar
try
/catch
alrededor del código para ejecutar, y ya no es necesario agregar unaexit
declaración.fuente
Ejecuto este comando dentro de un script bash, en particular para enviar trabajos SGE y procesar cosas por lotes:
fuente
Dado que ninguna de las respuestas tiene información sobre la alimentación del argumento de entrada, es importante agregarlo aquí. Después de investigar un poco, encontré este enlace.
Alimentar los argumentos es muy similar a cómo ejecutamos una función de Matlab.
Si de alguna manera está obteniendo un argumento de bash / terminal, simplemente necesita insertarlo en el comando bash como:
(Esto es después de un par de prueba y error)
fuente