2016-11-30 158 views
3

我從Windows命令提示符下運行MATLAB腳本:力Matlab的輸出到命令行

"C:\Program Files\MATLAB\R2014B\bin\matlab" -nodisplay -nosplash -nodesktop -wait -r "test.m" 

的test.m很簡單:

function test 
disp('Hello!'); 

輸出顯示在MATLAB命令窗口。有什麼辦法可以強制輸出到Windows提示符?

+0

這並不是您尋找的答案,但您可以使用'system'命令調用'echo',但是需要您修改m文件。 – Danny

+0

@Danny。感謝您的評論。是的,它不會幫助,因爲'system'的輸出也會轉到命令窗口,而不是windows命令提示符。 – Anton

回答

1

我已經找到了解決的:

https://www.mathworks.com/matlabcentral/answers/91607-how-can-i-redirect-the-command-window-output-to-stdout-and-stderr-when-running-matlab-7-8-r2009a-i#answer_100958

我會在這裏複製它的便利。 首先,我需要修改MATLAB腳本輸出到一個文本文件:

function test 
fid=fopen('output.txt','w'); 
fprintf(fid,'Hello!'); 
fclose(fid); 

那我應該用一個bat文件有一個附加的命令顯示output.txt中的內容運行了Matlab

"C:\Program Files\MATLAB\R2014B\bin\matlab" -nodisplay -nosplash -nodesktop -wait -r "test.m" 
type output.txt 

type命令將在命令窗口中顯示'output.txt'的內容。所以@matlabgui的回答幾乎就在那裏。謝謝。

這不是一個非常優雅的解決方案,但它的工作原理。

0

我不知道如何在Windows中執行此操作,以便讓Matlab實際在DOS窗口中運行,而這正是您需要將顯示器寫入其中的操作。 (僅供參考:您可以在LINUX中 - 但我假設您需要在Windows中運行)。

對於在Matlab中運行,你有2個方案,我能想到的:在啓動,將記錄所有輸出到您指定的文件

  1. -logfile文件 - 然而,當文件被寫入到如何和磁盤是由Matlab控制的,我還沒有測試過 - 如果你的代碼沒有做太多,它可能只寫在Matlab出口。

  2. 日誌文件在Matlab命令中,即-r "diary FILE.TXT; test.m; diary OFF" - 這與上面類似 - 但使用了diary函數。

但是你可以得到你想要的東西如果你可以運行你的代碼編譯(我知道那是一個很大的,如果因爲你可能沒有編譯器 - 或者如果你經常要更新test.m這不是最高效...

當您從DOS提示符運行編譯代碼時,所有的終端消息都被寫入到DOS提示符下。我建議的一個事情是,如果這樣做合適的話,就是從安裝目錄中刪除"splash.png"文件避免在DOS下運行時啓動畫面(可能不需要)。

+0

嗨matlabgui。感謝你的回答。我試過編譯選項。由於某些原因,與批處理Matlab執行相比,它的運行速度要慢得多。而且,是的,我需要經常更新腳本。 – Anton

+0

致@matlabgui。日記和輸出選項存在問題。我實際上需要從另一個程序中運行腳本,該腳本等待腳本的某個輸出繼續。它只是不會檢查日記文件。無論如何,我感謝你的幫助。 – Anton

+0

使您的Matlab腳本保存具有所需輸出的文件,並在其他程序中監視該文件。這個解決方案會容易得多。由於加載MCR所花費的時間,編譯版本會變慢。 – matlabgui

1

從命令行(或任何其他shell或批處理(例如,cmd或bat)腳本)調用Matlab時,使用命令行選項-log
它沒有記錄爲Matlab 2017b,但它的工作原理。

備註:在Matlab的Windows版本中不支持-nodisplay,但如果您想阻止它顯示數字,請改爲使用-noFigureWindows