Matlab: exécuter un fichier m à partir d’une ligne de commande

Supposer que;

J’ai un fichier m à l’emplacement:
C:\M1\M2\M3\mfile.m

Et le fichier exe du matlab est à cet endroit:
C:\E1\E2\E3\matlab.exe

Je veux exécuter ce fichier m avec Matlab, à partir d’une ligne de commande, par exemple dans un fichier .bat. Comment puis-je faire cela, y a-t-il un moyen de le faire?

Une commande comme celle-ci exécute le fichier m avec succès:

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

Je pense que l’un des points importants qui n’a pas été mentionné dans les réponses précédentes est que, s’il n’est pas explicitement indiqué, l’interprète de matlab restra ouvert. Par conséquent, à la réponse de @hkBattousai, je vais append la commande de exit :

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

Voici ce que j’utiliserais plutôt pour gérer avec élégance les erreurs du script:

 C:\\matlab.exe" -nodisplay -nosplash -nodesktop -r "try, run('C:\\mfile.m'), catch, exit, end, exit" 

Si vous voulez plus de verbosité:

 C:\\matlab.exe" -nodisplay -nosplash -nodesktop -r "try, run('C:\\mfile.m'), catch me, fprintf('%s / %s\n',me.identifier,me.message), end, exit" 

J’ai trouvé la référence originale ici .

Sous Linux, vous pouvez faire la même chose et vous pouvez réellement renvoyer au shell un code d’erreur personnalisé, comme suit:

 #!/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: $?" 

il imprime le matlab exit code: 1 si le script génère une exception, le matlab exit code: 0 sinon.

Voici les étapes:

  1. Démarrer la ligne de commande.
  2. Entrez le dossier contenant le fichier .m avec cd C:\M1\M2\M3
  3. Exécutez les opérations suivantes: C:\E1\E2\E3\matlab.exe -r mfile

Les systèmes Windows utiliseront votre dossier actuel comme emplacement pour que MATLAB recherche les fichiers .m et que l’option -r tente de démarrer le fichier .m dès que le démarrage se produit.

 cat 1.m | matlab -nodesktop -nosplash 

Et j’utilise Ubuntu

Merci à malat. Votre commentaire m’a aidé. Mais je veux append mon bloc try-catch, car j’ai trouvé la méthode getReport() qui renvoie l’intégralité du message d’erreur et l’imprime sur la console matlab.

De plus, j’ai imprimé le nom du fichier car cette compilation fait partie d’un script de traitement par lots qui appelle matlab.

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

Pour un nom de modèle faux transmis à la méthode de génération de code héritée, la sortie ressemblerait à:

 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 ';']); 

Enfin, pour afficher la sortie dans la fenêtre d’invite de commande de Windows, il suffit de connecter la console matlab à un fichier avec -logfile logfile.txt (utiliser en plus -wait ) et appeler le type logfile.txt commande batch type logfile.txt