web-dev-qa-db-fra.com

Matlab: Exécution d'un fichier m à partir de la 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 de la ligne de commande, par exemple à l'intérieur d'un fichier .bat. Comment puis-je faire cela, y a-t-il un moyen de le faire?

94
hkBattousai

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

95
hkBattousai

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 indiqué explicitement, l’interprète matlab restera ouvert. Par conséquent, à la réponse de @hkBattousai, je vais ajouter la commande exit:

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

67
elachell

Voici ce que je voudrais utiliser à 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 .

40
malat

Sous Linux, vous pouvez faire de même 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 matlab exit code: 1 si le script lève une exception, matlab exit code: 0 autrement.

25
slux83

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 ce qui suit: C:\E1\E2\E3\matlab.exe -r mfile

Les systèmes Windows utiliseront votre dossier actuel comme emplacement permettant à MATLAB de rechercher des fichiers .m, et l'option -r Essaie de démarrer le fichier .m donné dès le démarrage.

13
aardvarkk
cat 1.m | matlab -nodesktop -nosplash

Et j'utilise Ubuntu

10
Jia Ruipeng

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

De plus, j'ai imprimé le nom du 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 à ceci:

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 le résultat dans la fenêtre de commande de la commande windows, il suffit de consigner la console matlab dans un fichier avec -logfile logfile.txt _ (utiliser en plus -wait) et appelez la commande batch type logfile.txt

7
CanO