我在Octave中有一个程序有一个循环 - 运行一个带有各种参数的函数,而不是我可以变成矩阵的东西。在每次迭代开始时,我使用disp
打印当前参数。
我第一次跑它时有brazillion警告,然后我也得到了这些照片。现在我清理了它们,我不再看到它们了。我的猜测是他们被困在缓冲区中,当程序结束或缓冲区填满时我会看到它们。
有没有办法强制刷新打印缓冲区,以便能看到我的打印件?
答案 0 :(得分:43)
使用fflush(stdout)和/或fflush(stderr)从disp()刷新缓冲区。
答案 1 :(得分:27)
如moastab所述,fflush(stdout)
适用于Octave。
在MATLAB中,使用drawnow('update')
刷新输出。
MATLAB的drawnow
函数对于那些在MATLAB中控制重绘图形对象的人来说很熟悉,但它也适用于stdout stderr缓冲区。 'update'
选项不是必需的,但会将刷新限制为非图形队列。这个细节仅仅隐含在drawnow() documentation中;我已经验证它可以在循环中处理fprintf调用。
答案 2 :(得分:20)
Octave :您可以致电more off
来关闭输出缓冲。
这将禁用分页,以便将所有输出直接发送到屏幕。
答案 3 :(得分:6)
将以下命令放在您的部分或代码的开头:
test
答案 4 :(得分:3)
如果我正确理解您的问题,您可以使用日记功能将所有会话输出转储到文本文件。 diary on
将开始录制,diary off
将停止。 diary filename
将使用文件名而不是默认的“日记”。
它是Octave和MATLAB中的build -in函数。有关详细信息,请参阅help diary
。
您还可以增加Octave缓冲区大小。在Windows上,您可以在左上角菜单的“八度属性”对话框中执行此操作。
答案 5 :(得分:0)
drawnow
会导致图表更新,我不确定它是否也适用于stdout
管道。
您也可以将disp(...)
语句转换为fprintf(stderr, ...)
,我认为stderr
的处理方式与Octave上的stdout
不同。
答案 6 :(得分:0)
在{em> Octave 中,至少here和其他地方有至少5种获取即时输出的方法。
使用以下一个:
%---------------------------
% 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