如何刷新 Matlab 或 Octave 中 disp 的输出?
我在 Octave 中有一个程序,它有一个循环 - 运行一个带有各种参数的函数,而不是我可以转换成矩阵的东西。在每次迭代开始时,我使用 disp 打印当前参数。
我第一次运行它时,我得到了巴西警告,然后我也得到了这些照片。现在我把它们清理干净了,我就再也看不到它们了。我的猜测是它们被困在缓冲区中,当程序结束或缓冲区填满时我会看到它们。
有什么方法可以强制刷新打印缓冲区以便我可以看到我的打印结果吗?
I have a program in Octave that has a loop - running a function with various parameters, not something that I can turn into matrices. At the beginning of each iteration I print the current parameters using disp
.
The first times I ran it I had a brazillion warnings, and then I also got these prints. Now that I cleaned them up, I no longer see them. My guess is that they're stuck in a buffer, and I'll see them when the program ends or the buffer fills.
Is there any way to force a flush of the print buffer so that I can see my prints?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
使用 fflush(stdout) 和/或 fflush(stderr) 从 disp() 刷新缓冲区。
Use fflush(stdout) and/or fflush(stderr) to flush the buffer from disp().
正如 moastab 所提到的,
fflush(stdout)
适用于 Octave。在 MATLAB 中,使用
drawnow('update')
刷新输出。MATLAB 的
drawnow
函数对于在 MATLAB 中控制图形对象重绘的人员来说很熟悉,但它也适用于 stdout stderr 缓冲区。'update'
选项不是必需的,但会将刷新限制为非图形队列。此详细信息仅隐含在drawnow() 文档中;我已经验证它可以在循环中处理 fprintf 调用。As mentioned by moastab,
fflush(stdout)
works for Octave.In MATLAB, use
drawnow('update')
to flush the output.MATLAB's
drawnow
function will be familiar to those who control the redrawing of graphical objects in MATLAB, but it applies to the stdout stderr buffers as well. The'update'
option is not required, but limits the flushing to non-graphical queues. This detail is merely implied in the drawnow() documentation; I have verified it to work on fprintf calls in a loop.Octave:您可以通过调用
more off
来关闭输出缓冲。这将禁用分页,以便所有输出都直接发送到屏幕。
Octave: You can turn off buffering of output by calling
more off
.This will disable pagination such that all output is sent directly to the screen.
将以下命令放在您的部分或代码的开头:
Put the following commands at the beginning of your section or your code:
如果我正确理解您的问题,您可以使用 diary 函数将所有会话输出转储到文本文件。
diary on
将开始录制,diary off
将停止。diary filename
将使用文件名而不是默认的“diary”。它是 Octave 和 MATLAB 中的内置函数。有关更多详细信息,请参阅
帮助日记
。您还可以增加 Octave 缓冲区大小。在 Windows 上,您可以在左上角菜单的“八度属性”对话框中执行此操作。
If I understand your question correctly, you can use diary function to dump all session output to a text file.
diary on
will start recording, anddiary off
will stop.diary filename
will use filename instead of default "diary".It is build -in function in both Octave and MATLAB. For more details see
help diary
.Also you can increase Octave buffer size. On Windows you can do it in Octave Properties dialog from upper left corner menu.
从这里和其他地方,有至少有 5 种方法可以立即输出,以 Octave 为单位。
使用以下之一:
From here and elsewhere, there are at least 5 methods to get immediate output, in Octave.
Use one of the following:
drawnow
将导致图形更新,我不确定它是否也适用于stdout
管道。您还可以将
disp(...)
语句转换为fprintf(stderr, ...)
,我认为stderr
的处理方式与Octave 上的stdout
。drawnow
will cause graphs to update, I'm not sure if it works on thestdout
pipe as well.You might also convert your
disp(...)
statements tofprintf(stderr, ...)
, I thinkstderr
is handled differently fromstdout
on Octave.