我在Octave中编写了一个程序,其中有一个循环 - 运行具有不同参数的函数,这不是我可以转换为矩阵的内容。在每次迭代开始时,我使用disp
打印当前参数。
前几次运行时,我看到了brazillion警告,然后我也看到了这些输出。现在我已经清理干净了它们,我再也看不到它们了。我猜想它们被卡在缓冲区中,当程序结束或缓冲区填满时,我会看到它们。
是否有任何方法强制刷新打印缓冲区,以便我可以看到我的打印内容?
我在Octave中编写了一个程序,其中有一个循环 - 运行具有不同参数的函数,这不是我可以转换为矩阵的内容。在每次迭代开始时,我使用disp
打印当前参数。
前几次运行时,我看到了brazillion警告,然后我也看到了这些输出。现在我已经清理干净了它们,我再也看不到它们了。我猜想它们被卡在缓冲区中,当程序结束或缓冲区填满时,我会看到它们。
是否有任何方法强制刷新打印缓冲区,以便我可以看到我的打印内容?
使用 fflush(stdout) 和/或 fflush(stderr) 来刷新从 disp() 函数的缓冲区。
drawnow('update')
来刷新输出。 - Arthur Hebert-Ryan如moastab所述,在Octave中可以使用fflush(stdout)
。
在MATLAB中,使用drawnow('update')
来刷新输出。
MATLAB的drawnow
函数对于控制MATLAB中图形对象的重绘是熟悉的,但它也适用于stdout stderr缓冲区。 'update'
选项不是必需的,但限制了刷新到非图形队列。这一细节仅隐含在drawnow()文档中; 我已经验证它可在循环中的fprintf调用上工作。
Octave:您可以通过调用 more off
来关闭输出缓冲区。
这将禁用分页功能,使所有输出直接发送到屏幕。
将以下命令放在您的部分或代码开头:
page_screen_output(0);
page_output_immediately(1);
diary on
将开始记录,diary off
将停止记录。 diary filename
将使用文件名而不是默认值 "diary"。help diary
。从这里和其他地方,至少有5种方法可以在Octave中获得即时输出。
使用以下其中一种:
%---------------------------
% Turn OFF output buffering
%---------------------------
more off % command & NOT shown in output
PAGER = "less" % built-in var - shown in output
page_screen_output = 0 % built-in var - shown in output
page_output_immediately = 1 % built-in var - shown in output
fflush(stdout) % Need to call after each "output" line
drawnow
会导致图形更新,我不确定它是否也适用于stdout
管道。
你可能还需要将disp(...)
语句转换为fprintf(stderr, ...)
,因为我认为在Octave上stderr
和stdout
的处理方式是不同的。