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?
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');"
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;"
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.
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.
Voici les étapes:
- démarrez la ligne de commande.
- Entrez le dossier contenant le .m fichier avec
cd C:\M1\M2\M3
- 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.
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