Seandainya;
Saya memiliki m-file di lokasi:
C:\M1\M2\M3\mfile.m
Dan file exe dari matlab ada di lokasi ini:
C:\E1\E2\E3\matlab.exe
Saya ingin menjalankan m-file ini dengan Matlab, dari baris perintah, misalnya di dalam file .bat. Bagaimana saya bisa melakukan ini, apakah ada cara untuk melakukannya?
matlab
command-line
automation
hkBattousai
sumber
sumber
Jawaban:
Perintah seperti ini berhasil menjalankan m-file:
"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m'); exit;"
sumber
Menurut saya satu poin penting yang tidak disebutkan dalam jawaban sebelumnya adalah, jika tidak disebutkan secara eksplisit, penerjemah matlab akan tetap terbuka. Oleh karena itu, untuk jawaban @hkBattousai saya akan menambahkan
exit
perintah:"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m');exit;"
sumber
mfile.m
memicu kesalahan,exit
fungsi eksplisit tidak pernah dipanggil, membuat seluruh proses menunggu ...Inilah yang akan saya gunakan sebagai gantinya, untuk menangani kesalahan dari skrip dengan anggun:
Jika Anda ingin lebih banyak verbositas:
Saya menemukan referensi aslinya di sini . Karena tautan asli sekarang hilang, berikut ini tautan ke pembaca baru alternatif yang masih hidup sampai sekarang:
sumber
Di Linux Anda dapat melakukan hal yang sama dan Anda benar-benar dapat mengirim kembali ke shell kode kesalahan khusus, seperti berikut:
itu mencetak
matlab exit code: 1
jika skrip melempar pengecualian,matlab exit code: 0
jika tidak.sumber
"try, run('/foo/bar/my_script.m'), catch e, disp(getReport(e)), exit(1), end, exit(0);"
Berikut langkah-langkahnya:
cd C:\M1\M2\M3
C:\E1\E2\E3\matlab.exe -r mfile
Sistem Windows akan menggunakan folder Anda saat ini sebagai lokasi MATLAB untuk mencari file .m, dan
-r
opsi mencoba untuk memulai file .m yang diberikan segera setelah startup terjadi.sumber
CreateProcessW()
.Dan saya menggunakan Ubuntu
sumber
Terima kasih malat. Komentar Anda membantu saya. Tetapi saya ingin menambahkan blok try-catch saya, karena saya menemukan
MExeption
metodegetReport()
yang mengembalikan seluruh pesan kesalahan dan mencetaknya ke konsol matlab.Selain itu saya mencetak nama file karena kompilasi ini adalah bagian dari skrip batch yang memanggil matlab.
Untuk nama model palsu yang diteruskan ke metode pembuatan kode lama, hasilnya akan terlihat seperti:
Terakhir, untuk menampilkan output di jendela prompt perintah windows, cukup log konsol matlab ke file dengan
-logfile logfile.txt
(gunakan tambahan-wait
) dan panggil perintah batchtype logfile.txt
sumber
Sejak R2019b, ada opsi baris perintah baru
-batch
,. Ini menggantikan-r
, yang tidak lagi direkomendasikan. Ini juga menyatukan sintaks di seluruh platform. Lihat misalnya dokumentasi untuk Windows , untuk platform lain deskripsinya identik.Ini memulai MATLAB tanpa desktop atau layar splash, mencatat semua output ke
stdout
danstderr
, keluar secara otomatis ketika pernyataan selesai, dan memberikan kode keluar yang melaporkan keberhasilan atau kesalahan.Dengan demikian, tidak perlu lagi menggunakan
try
/catch
mengelilingi kode untuk dijalankan, dan tidak perlu lagi menambahkanexit
pernyataan.sumber
Saya menjalankan perintah ini dalam skrip bash, khususnya untuk mengirimkan pekerjaan SGE dan proses batch:
sumber
Karena tidak ada jawaban yang memiliki informasi tentang argumen input makan, penting untuk menambahkannya di sini. Setelah beberapa penelitian, saya menemukan tautan ini
Memberi makan argumen sangat mirip dengan cara kami menjalankan fungsi Matlab.
Jika Anda entah bagaimana mendapatkan argumen dari bash / terminal, Anda hanya perlu memasukkannya ke dalam perintah bash sebagai:
(Ini setelah beberapa kali coba-coba)
sumber