2010-04-13 45 views
31

我有一個程序在Octave中有一個循環 - 運行一個帶有各種參數的函數,而不是我可以變成矩陣的東西。在每次迭代開始時,我使用disp打印當前參數。如何在Matlab或Octave中刷新disp的輸出?

我第一次跑它我有一個brazillion警告,然後我也得到了這些打印。現在我把它們清理乾淨了,我不再看到它們了。我的猜測是他們被困在緩衝區中,當程序結束或緩衝區填滿時我會看到它們。

有沒有辦法強制沖洗打印緩衝區,以便我可以看到我的打印件?

+0

這裏的更多,包括尋呼信息:http://www.chemie.fu-berlin.de/chemnet/use/ info/octave/octave_22.html – Nucular 2012-01-31 14:01:44

+0

它也發生在Matlab中嗎? – 2012-02-02 18:05:27

回答

39

使用fflush(stdout)和/或fflush(stderr)從disp()中清空緩衝區。

+10

出於好奇,你知道是否有與fflush()相當的Matlab?我想要做同樣的事情,但我使用Matlab,而不是Octave,並且沒有fflush()函數。 – 2010-04-14 13:38:10

+3

在MATLAB中,使用'drawnow('update')'刷新輸出。 – 2016-03-16 05:10:05

3

如果我正確理解你的問題,可以使用日記函數將所有會話輸出轉儲到文本文件。 diary on將開始錄製,並且diary off將停止。 diary filename將使用文件名而不是默認的「日記」。

它在Octave和MATLAB中都是內置函數。欲瞭解更多詳情,請參閱help diary


此外,您可以增加八度緩衝區大小。在Windows上,您可以在左上角菜單的「八度屬性」對話框中進行設置。

0

drawnow會導致圖形更新,我不確定它是否也可以在stdout管道上工作。

您還可以將您的disp(...)語句fprintf(stderr, ...),我覺得stderrstdout不同的處理上八度。

26

正如moastab所述,fflush(stdout)適用於Octave。

在MATLAB中,使用drawnow('update')來刷新輸出。

MATLAB的drawnow函數對於那些想在MATLAB中控制重繪圖形對象的人來說很熟悉,但它也適用於stdout stderr緩衝區。 'update'選項不是必需的,但會限制刷新到非圖形隊列。這個細節僅僅暗示在drawnow() documentation;我已經驗證它在循環中對fprintf調用進行處理。

19

Octave:您可以通過調用more off來關閉輸出緩衝。

這將禁用分頁,使所有輸出直接發送到屏幕。

5

把下面的命令在你的部分或你的代碼的開頭:

page_screen_output(0); 

page_output_immediately(1);