我有一個程序在Octave中有一個循環 - 運行一個帶有各種參數的函數,而不是我可以變成矩陣的東西。在每次迭代開始時,我使用disp
打印當前參數。如何在Matlab或Octave中刷新disp的輸出?
我第一次跑它我有一個brazillion警告,然後我也得到了這些打印。現在我把它們清理乾淨了,我不再看到它們了。我的猜測是他們被困在緩衝區中,當程序結束或緩衝區填滿時我會看到它們。
有沒有辦法強制沖洗打印緩衝區,以便我可以看到我的打印件?
我有一個程序在Octave中有一個循環 - 運行一個帶有各種參數的函數,而不是我可以變成矩陣的東西。在每次迭代開始時,我使用disp
打印當前參數。如何在Matlab或Octave中刷新disp的輸出?
我第一次跑它我有一個brazillion警告,然後我也得到了這些打印。現在我把它們清理乾淨了,我不再看到它們了。我的猜測是他們被困在緩衝區中,當程序結束或緩衝區填滿時我會看到它們。
有沒有辦法強制沖洗打印緩衝區,以便我可以看到我的打印件?
使用fflush(stdout)和/或fflush(stderr)從disp()中清空緩衝區。
出於好奇,你知道是否有與fflush()相當的Matlab?我想要做同樣的事情,但我使用Matlab,而不是Octave,並且沒有fflush()函數。 – 2010-04-14 13:38:10
在MATLAB中,使用'drawnow('update')'刷新輸出。 – 2016-03-16 05:10:05
如果我正確理解你的問題,可以使用日記函數將所有會話輸出轉儲到文本文件。 diary on
將開始錄製,並且diary off
將停止。 diary filename
將使用文件名而不是默認的「日記」。
它在Octave和MATLAB中都是內置函數。欲瞭解更多詳情,請參閱help diary
。
此外,您可以增加八度緩衝區大小。在Windows上,您可以在左上角菜單的「八度屬性」對話框中進行設置。
drawnow
會導致圖形更新,我不確定它是否也可以在stdout
管道上工作。
您還可以將您的disp(...)
語句fprintf(stderr, ...)
,我覺得stderr
從stdout
不同的處理上八度。
正如moastab所述,fflush(stdout)
適用於Octave。
在MATLAB中,使用drawnow('update')
來刷新輸出。
MATLAB的drawnow
函數對於那些想在MATLAB中控制重繪圖形對象的人來說很熟悉,但它也適用於stdout stderr緩衝區。 'update'
選項不是必需的,但會限制刷新到非圖形隊列。這個細節僅僅暗示在drawnow() documentation;我已經驗證它在循環中對fprintf調用進行處理。
Octave:您可以通過調用more off
來關閉輸出緩衝。
這將禁用分頁,使所有輸出直接發送到屏幕。
把下面的命令在你的部分或你的代碼的開頭:
page_screen_output(0);
page_output_immediately(1);
這裏的更多,包括尋呼信息:http://www.chemie.fu-berlin.de/chemnet/use/ info/octave/octave_22.html – Nucular 2012-01-31 14:01:44
它也發生在Matlab中嗎? – 2012-02-02 18:05:27