Matlab: esecuzione di un m-file da riga di comando

Supporre che;

Ho un m-file in posizione:
C:\M1\M2\M3\mfile.m

E il file exe del MATLAB è in questa posizione:
C:\E1\E2\E3\matlab.exe

Voglio eseguire questo m-file con Matlab, da riga di comando, per esempio all’interno di un file .bat. Come posso fare questo, c’è un modo per farlo?

Un comando come questo esegue correttamente il m-file:

"C:\\matlab.exe" -nodessplay -nosplash -nodesktop -r "run('C:\\mfile.m');"

Penso che un punto importante che non è stato menzionato nelle risposte precedenti è che, se non esplicitamente indicato, l’interprete MATLAB rimarrà aperto. Pertanto, alla risposta di @hkBattousai aggiungerò il comando exit :

"C:\\matlab.exe" -nodessplay -nosplash -nodesktop -r "run('C:\\mfile.m');exit;"

Su Linux puoi fare lo stesso e puoi effettivamente inviare alla shell un codice di errore personalizzato, come il seguente:

 #!/bin/bash matlab -nodessplay -nojvm -nosplash -nodesktop -r \ "try, run('/foo/bar/my_script.m'), catch, exit(1), end, exit(0);" echo "matlab exit code: $?" 

stampa il matlab exit code: 1 se lo script genera un’eccezione, altrimenti il matlab exit code: 0 .

Ecco i passaggi:

  1. Inizia la riga di comando.
  2. Immettere la cartella contenente il file .m con cd C:\M1\M2\M3
  3. Eseguire quanto segue: C:\E1\E2\E3\matlab.exe -r mfile

I sistemi Windows utilizzeranno la cartella corrente come posizione per MATLAB per cercare i file .m e l’opzione -r tenta di avviare il file .m dato non appena si verifica l’avvio.

 cat 1.m | matlab -nodesktop -nosplash 

E io uso Ubuntu

Grazie a Malat. Il tuo commento mi ha aiutato. Ma voglio aggiungere il mio blocco try-catch, in quanto ho trovato il metodo getReport() che restituisce l’intero messaggio di errore e lo stampa sulla console MATLAB.

Inoltre ho stampato il nome del file in quanto questa compilazione fa parte di uno script batch che chiama matlab.

 try some_code ... catch message display(['ERROR in file: ' message.stack.file]) display(['ERROR: ' getReport(message)]) end; 

Per un nome di modello falso passato al metodo di generazione del codice legacy, l’output sarebbe simile 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 ';']); 

Infine, per visualizzare l’output nella finestra del prompt dei comandi di Windows, basta registrare la console MATLAB in un file con -logfile logfile.txt (utilizzare inoltre -wait ) e chiamare il type logfile.txt comando batch type logfile.txt