强制 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 命令窗口的主要内容,如果未能解决你的问题,请参考以下文章

为何在c++中要将一个char型的变量以数的形式输出需要将其强制转换成int 型的,而单片机中不用

c++如何获取dos命令的返回值

DOS下强制删除文件夹的命令是啥??

c++ 重定位输出到DOS

是否可以强制转换 c++ 运算符新输出? [关闭]

如何将 dos 命令的输出读取/重定向到 C/C++ 中的程序变量?