【问题标题】:force c++ program to show 'synchronized' output to MATLAB command window using dos()强制 c++ 程序使用 dos() 将“同步”输出显示到 MATLAB 命令窗口
【发布时间】:2011-09-23 09:36:18
【问题描述】:

我正在使用dos('myprog.exe') 在 MATLAB 中执行我的 c++ 编译程序。 myprog 会产生一些输出,仅在 myprog.exe 完成执行后才会打印到 MATLAB 命令窗口。

有没有办法强制 MATLAB 在 myprog.exe 生成输出时而不是在最后打印输出?

【问题讨论】:

    标签: matlab command-window


    【解决方案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(这也是一个冲洗器)替换一些换行符,它终于奏效了。第一次测试时我可能会出错。修改您的答案,以便我接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    相关资源
    最近更新 更多