强制 c++ 程序使用 dos() 将“同步”输出显示到 MATLAB 命令窗口
Posted
技术标签:
【中文标题】强制 c++ 程序使用 dos() 将“同步”输出显示到 MATLAB 命令窗口【英文标题】:force c++ program to show 'synchronized' output to MATLAB command window using dos() 【发布时间】:2011-09-23 09:36:18 【问题描述】:我正在使用dos('myprog.exe')
在 MATLAB 中执行我的 c++ 编译程序。 myprog 会产生一些输出,仅在 myprog.exe 完成执行后才会打印到 MATLAB 命令窗口。
有没有办法强制 MATLAB 在 myprog.exe 生成输出时而不是在最后打印输出?
【问题讨论】:
【参考方案1】:回答 确保正确刷新 c++ 程序中的输出缓冲区。根据我的经验,有时在代码中插入额外的刷新命令(不仅仅是行尾命令)会有所帮助:
std::cout << std::endl;
注意 你也可以尝试这样调用你的程序:
[status,result] = dos('myprog.exe','-echo')
[status,result] = system('myprog.exe','-echo')
matlab 帮助说:“'echo' 强制输出到命令行窗口,即使它也被分配到一个变量中。”
但这可能不起作用,因为(再次 matlab 帮助): “控制台程序永远不会在后台执行。此外,MATLAB 软件总是在继续执行之前等待标准输出管道关闭。” 这意味着,matlab 可能会等到您的程序完成执行后才会显示你控制台输出。在这种情况下,您无能为力。
【讨论】:
这行不通,但必须有办法。为什么msbuild
输出显示正常?
然后尝试添加额外的语句来刷新“myprog.exe”中的输出缓冲区
你也可以试试:[status,result] = system('myprog.ext','-echo') or !myprog.exe
第一个已经试过了,第二个不行。再看看这个问题,我编辑了它。它可能会敲响警钟
@memmyself:你说得对,这是正确冲洗的问题。用std::endl
(这也是一个冲洗器)替换一些换行符,它终于奏效了。第一次测试时我可能会出错。修改您的答案,以便我接受。以上是关于强制 c++ 程序使用 dos() 将“同步”输出显示到 MATLAB 命令窗口的主要内容,如果未能解决你的问题,请参考以下文章