Nehme an, dass;
Ich habe eine M-Datei vor Ort:
C:\M1\M2\M3\mfile.m
Und die exe-Datei des Matlab befindet sich an dieser Stelle:
C:\E1\E2\E3\matlab.exe
Ich möchte diese M-Datei mit Matlab über die Befehlszeile ausführen, beispielsweise in einer .bat-Datei. Wie kann ich das machen, gibt es eine Möglichkeit das zu tun?
matlab
command-line
automation
hkBattousai
quelle
quelle
Antworten:
Ein Befehl wie dieser führt die m-Datei erfolgreich aus:
"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m'); exit;"
quelle
Ich denke, dass ein wichtiger Punkt, der in den vorherigen Antworten nicht erwähnt wurde, ist, dass der Matlab-Interpreter offen bleibt, wenn er nicht ausdrücklich angegeben wird. Daher werde ich zur Antwort von @hkBattousai den
exit
Befehl hinzufügen :"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m');exit;"
quelle
mfile.m
ein Fehlerexit
Folgendes würde ich stattdessen verwenden, um Fehler aus dem Skript ordnungsgemäß zu behandeln:
Wenn Sie mehr Ausführlichkeit wünschen:
Ich habe die Originalreferenz hier gefunden . Da der ursprüngliche Link jetzt weg ist, ist hier der Link zu einem alternativen Newreader, der heute noch lebt:
quelle
Unter Linux können Sie dasselbe tun und einen benutzerdefinierten Fehlercode wie den folgenden an die Shell zurücksenden:
Andernfalls wird es gedruckt,
matlab exit code: 1
wenn das Skript eine Ausnahmematlab exit code: 0
auslöst.quelle
"try, run('/foo/bar/my_script.m'), catch e, disp(getReport(e)), exit(1), end, exit(0);"
Hier sind die Schritte:
cd C:\M1\M2\M3
C:\E1\E2\E3\matlab.exe -r mfile
Windows-Systeme verwenden Ihren aktuellen Ordner als Speicherort für MATLAB, um nach .m-Dateien zu suchen, und die
-r
Option versucht, die angegebene .m-Datei zu starten, sobald der Start erfolgt.quelle
CreateProcessW()
.Und ich benutze Ubuntu
quelle
Danke an malat. Ihr Kommentar hat mir geholfen. Ich möchte jedoch meinen Try-Catch-Block hinzufügen, da ich die
MExeption
Methode gefunden habegetReport()
, die die gesamte Fehlermeldung zurückgibt und auf der Matlab-Konsole druckt.Zusätzlich habe ich den Dateinamen gedruckt, da diese Zusammenstellung Teil eines Batch-Skripts ist, das matlab aufruft.
Für einen falschen Modellnamen, der an die Legacy-Codegenerierungsmethode übergeben wird, sieht die Ausgabe folgendermaßen aus:
Um die Ausgabe am Windows-Eingabeaufforderungsfenster anzuzeigen, protokollieren Sie einfach die Matlab-Konsole in einer Datei mit
-logfile logfile.txt
(zusätzlich verwenden-wait
) und rufen Sie den Batch-Befehl auftype logfile.txt
quelle
Seit R2019b gibt es eine neue Befehlszeilenoption
-batch
. Es ersetzt-r
, was nicht mehr empfohlen wird. Außerdem wird die Syntax plattformübergreifend vereinheitlicht. Siehe zum Beispiel die Dokumentation für Windows , für die anderen Plattformen ist die Beschreibung identisch.Dadurch wird MATLAB ohne Desktop- oder Begrüßungsbildschirm gestartet, alle Ausgaben werden in
stdout
und protokolliertstderr
, automatisch beendet, wenn die Anweisung abgeschlossen ist, und es wird ein Beendigungscode bereitgestellt, der über Erfolg oder Fehler berichtet.Es ist somit nicht mehr notwendig zu verwenden
try
/catch
um den Code auszuführen, und es ist nicht mehr notwendig , eine hinzuzufügenexit
Aussage.quelle
Ich führe diesen Befehl in einem Bash-Skript aus, insbesondere um SGE-Jobs zu senden und Dinge im Batch-Prozess zu verarbeiten:
quelle
Da keine der Antworten Informationen zum Füttern von Eingabeargumenten enthält, ist es wichtig, diese hier hinzuzufügen. Nach einigen Recherchen habe ich diesen Link gefunden
Das Einspeisen der Argumente ist dem Ausführen einer Matlab-Funktion sehr ähnlich.
Wenn Sie ein Argument von bash / terminal erhalten, müssen Sie es einfach wie folgt in den Befehl bash einfügen:
(Dies ist nach ein paar Versuchen und Irrtümern)
quelle