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?
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');"
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;"
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 .
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.
Voici les étapes:
cd C:\M1\M2\M3
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.
cat 1.m | matlab -nodesktop -nosplash
Et j'utilise Ubuntu
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