Przypuszczam, że;
Mam plik m w lokalizacji:
C:\M1\M2\M3\mfile.m
A plik exe programu Matlab znajduje się w tej lokalizacji:
C:\E1\E2\E3\matlab.exe
Chcę uruchomić ten plik m za pomocą Matlab, z wiersza poleceń, na przykład w pliku .bat. Jak mogę to zrobić, czy jest na to sposób?
matlab
command-line
automation
hkBattousai
źródło
źródło
Odpowiedzi:
Polecenie takie jak to pomyślnie uruchamia plik m:
"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m'); exit;"
źródło
Myślę, że jedną ważną kwestią, o której nie wspomniano w poprzednich odpowiedziach, jest to, że jeśli nie zostanie to wyraźnie wskazane, tłumacz języka Matlab pozostanie otwarty. Dlatego do odpowiedzi @hkBattousai dodam
exit
polecenie:"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m');exit;"
źródło
mfile.m
wywoła błąd, jawnaexit
funkcja nigdy nie jest wywoływana, co powoduje, że cały proces czeka ...Oto czego użyłbym zamiast tego, aby z wdziękiem obsługiwać błędy ze skryptu:
Jeśli chcesz więcej szczegółowości:
Znalazłem tutaj oryginalne odniesienie . Ponieważ oryginalne łącze zniknęło, oto łącze do alternatywnego, wciąż żywego czytnika:
źródło
W systemie Linux możesz zrobić to samo i faktycznie możesz wysłać z powrotem do powłoki niestandardowy kod błędu, taki jak następujący:
drukuje,
matlab exit code: 1
jeśli skrypt zgłosi wyjątek, wmatlab exit code: 0
przeciwnym razie.źródło
"try, run('/foo/bar/my_script.m'), catch e, disp(getReport(e)), exit(1), end, exit(0);"
Oto kroki:
cd C:\M1\M2\M3
C:\E1\E2\E3\matlab.exe -r mfile
Systemy Windows użyją twojego aktualnego folderu jako lokalizacji dla MATLAB do wyszukiwania plików .m, a
-r
opcja spróbuje uruchomić dany plik .m zaraz po uruchomieniu.źródło
CreateProcessW()
.Używam Ubuntu
źródło
Dzięki malatowi. Twój komentarz mi pomógł. Ale chcę dodać mój blok try-catch, ponieważ znalazłem
MExeption
metodę,getReport()
która zwraca cały komunikat o błędzie i wyświetla go na konsoli Matlab.Dodatkowo wydrukowałem nazwę pliku, ponieważ ta kompilacja jest częścią skryptu wsadowego, który wywołuje matlab.
W przypadku fałszywej nazwy modelu przekazanej do starszej metody generowania kodu dane wyjściowe wyglądałyby następująco:
Na koniec, aby wyświetlić dane wyjściowe w oknie wiersza polecenia systemu Windows, po prostu zaloguj się konsoli Matlab do pliku z
-logfile logfile.txt
(użyj dodatkowo-wait
) i wywołaj polecenie wsadowetype logfile.txt
źródło
Od R2019b, pojawiła się nowa opcja wiersza poleceń
-batch
. Zastępuje to-r
, co nie jest już zalecane. Ujednolica również składnię na różnych platformach. Zobacz na przykład dokumentację dla systemu Windows , w przypadku innych platform opis jest identyczny.To uruchamia MATLAB bez pulpitu lub ekranu powitalnego, rejestruje wszystkie dane wyjściowe do
stdout
istderr
, kończy się automatycznie po zakończeniu instrukcji i wyświetla kod zakończenia raportujący powodzenie lub błąd.W związku z tym nie jest już konieczne używanie
try
/catch
wokół kodu do uruchomienia i nie jest już konieczne dodawanieexit
instrukcji.źródło
Uruchamiam to polecenie w skrypcie bash, w szczególności w celu przesłania zadań SGE i procesów wsadowych:
źródło
Ponieważ żadna z odpowiedzi nie zawiera informacji o podawaniu argumentów wejściowych, ważne jest, aby je tutaj dodać. Po kilku badaniach znalazłem ten link
Podawanie argumentów jest bardzo podobne do tego, jak uruchamiamy funkcję Matlab.
Jeśli w jakiś sposób otrzymujesz argument z bash / terminal, po prostu musisz wstawić go do polecenia bash jako:
(To jest po kilku próbach i błędach)
źródło