Supposer que;
J'ai un fichier m à l'emplacement:
C:\M1\M2\M3\mfile.m
Et le fichier exe du matlab se trouve à cet emplacement:
C:\E1\E2\E3\matlab.exe
Je veux exécuter ce m-file avec Matlab, à partir de la ligne de commande, par exemple dans un fichier .bat. Comment puis-je faire cela, y a-t-il un moyen de le faire?
matlab
command-line
automation
hkBattousai
la source
la source
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'); exit;"
la source
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
exit
commande:"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m');exit;"
la source
mfile.m
déclenche une erreur, laexit
fonction explicite n'est jamais appelée, ce qui fait attendre tout le processus ...Voici ce que j'utiliserais à la place, pour gérer gracieusement les erreurs du script:
Si vous voulez plus de verbosité:
J'ai trouvé la référence originale ici . Puisque le lien d'origine a maintenant disparu, voici le lien vers un nouveau lecteur alternatif toujours en vie aujourd'hui:
la source
Sous Linux, vous pouvez faire de même et vous pouvez en fait renvoyer au shell un code d'erreur personnalisé, comme suit:
il imprime
matlab exit code: 1
si le script lève une exception,matlab exit code: 0
sinon.la source
"try, run('/foo/bar/my_script.m'), catch e, disp(getReport(e)), exit(1), end, exit(0);"
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 pour MATLAB pour rechercher les fichiers .m, et l'
-r
option essaiera de démarrer le fichier .m donné dès le démarrage.la source
CreateProcessW()
.Et j'utilise Ubuntu
la source
Merci à malat. Votre commentaire m'a aidé. Mais je veux ajouter mon bloc try-catch, car j'ai trouvé la
MExeption
méthodegetReport()
qui renvoie le message d'erreur complet et l'affiche sur la console matlab.De plus, j'ai imprimé le nom du fichier car cette compilation fait partie d'un script batch qui appelle matlab.
Pour un faux nom de modèle passé à la méthode de génération de code héritée, la sortie ressemblerait à:
Enfin, pour afficher la sortie dans la fenêtre d'invite de commande Windows, enregistrez simplement la console matlab dans un fichier avec
-logfile logfile.txt
(utilisez en plus-wait
) et appelez la commande batchtype logfile.txt
la source
Depuis R2019b, il y a une nouvelle option de ligne de commande,
-batch
. Il remplace-r
, ce qui n'est plus recommandé. Il unifie également la syntaxe entre les plates-formes. Voir par exemple la documentation de Windows , pour les autres plates-formes la description est identique.Cela démarre MATLAB sans le bureau ou l'écran de démarrage, enregistre toutes les sorties dans
stdout
etstderr
, se ferme automatiquement lorsque l'instruction se termine et fournit un code de sortie signalant une réussite ou une erreur.Il n'est donc plus nécessaire d'utiliser
try
/catch
autour du code à exécuter, et il n'est plus nécessaire d'ajouter uneexit
instruction.la source
J'exécute cette commande dans un script bash, en particulier pour soumettre des travaux SGE et des processus de traitement par lots:
la source
Comme aucune des réponses ne contient d'informations sur l'alimentation de l'argument d'entrée, il est important de l'ajouter ici. Après quelques recherches, j'ai trouvé ce lien
L'alimentation des arguments est très similaire à la façon dont nous exécutons une fonction Matlab.
Si vous obtenez en quelque sorte un argument de bash / terminal, vous devez simplement l'insérer dans la commande bash comme suit:
(C'est après quelques essais et erreurs)
la source