Matlab: exécution d'un fichier m à partir de la ligne de commande

Supposons que;

J'ai un fichier m à l'emplacement:
C:M1M2M3mfile.m

Et fichier exe de l'matlab est à cet emplacement:
C:E1E2E3matlab.exe

Je veux exécuter ce fichier m avec Matlab, à partir de la ligne de commande, par exemple à l'intérieur d'un .le fichier bat. Comment puis-je faire cela, est-il un moyen de le faire?

80
demandé sur Harry Johnston 2011-07-12 01:44:53

7 réponses

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

"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m');"

84
répondu hkBattousai 2011-07-16 13:47:22

Je pense qu'un point important qui n'a pas été mentionné dans les réponses précédentes est que, s'il n'est pas explicitement indiqué, l'interpréteur matlab restera ouvert. Par conséquent, à la réponse de @hkBattousai, j'ajouterai la commande exit:

"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m');exit;"

60
répondu elachell 2016-06-02 22:15:24

Voici ce que j'utiliserais à la place, pour gérer gracieusement les erreurs du 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 vous voulez plus de verbosité:

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"

J'ai trouvé la référence d'origine ici.

31
répondu malat 2015-09-14 15:53:53

Sous Linux, vous pouvez faire la même chose et vous pouvez renvoyer au shell un code d'erreur personnalisé, comme ceci:

#!/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 matlab exit code: 1 si le script lève une exception, matlab exit code: 0 sinon.

16
répondu slux83 2016-03-31 13:15:29

Voici les étapes:

  1. démarrez la ligne de commande.
  2. Entrez le dossier contenant le .m fichier avec cd C:\M1\M2\M3
  3. exécutez ce qui suit: C:\E1\E2\E3\matlab.exe -r mfile

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

12
répondu aardvarkk 2011-07-11 21:59:30
cat 1.m | matlab -nodesktop -nosplash

Et J'utilise Ubuntu

7
répondu Jia Ruipeng 2016-12-03 03:14:03

Merci à malat. Votre commentaire m'a aidé. Mais je veux ajouter mon bloc try-catch, car j'ai trouvé la méthode MExeption getReport() qui renvoie le message d'erreur entier et l'imprime sur la console matlab.

De plus, j'ai imprimé le nom de fichier car cette compilation fait partie d'un script batch qui appelle matlab.

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

Pour un faux nom de modèle 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 sur les fenêtres fenêtre d'invite de commande, connectez simplement la console matlab à un fichier avec -logfile logfile.txt (utilisez en plus -wait) et appelez la commande batch type logfile.txt

6
répondu CanO 2017-05-23 12:34:30