【发布时间】:2016-07-13 21:34:39
【问题描述】:
我有一个 MATLAB 脚本,它使用 system() 命令调用可执行文件(用 C++ 编写),如下所示:
exe_status = system('MySimulation.exe', arguments);
由于可执行文件可能需要很长时间才能运行(最多几个小时),因此我在其中包含了一个函数,用于估计剩余时间并将其输出到控制台。如果我在 MATLAB 之外运行可执行文件,Windows 控制台大致如下所示:
Simulation #B01 initiated...
Completion: 0.57% Time remaining: 183 m 2 s
使用\r 字符,“完成”行每秒都会自我重写。这非常有效,让我知道什么时候回来分析数据。
很遗憾,从 MATLAB 控制台调用可执行文件不会产生相同的效果。 MATLAB 一直等到可执行文件终止,然后才显示任何控制台输出,从而使我的计时器没有实际意义。
我尝试了以下命令,但它们都有相同的行为:
exe_status = system('MySimulation.exe', arguments);
exe_status = system('MySimulation.exe', arguments, '-echo');
exe_status = dos('MySimulation.exe', arguments);
exe_status = dos('MySimulation.exe', arguments, '-echo');
除非我读错了,否则MATLAB documentation 似乎表明'-echo' 可用于在可执行文件仍在运行时回显命令输出,但它对我的特定程序没有影响。
【问题讨论】:
-
如果您尝试
system('ping google.com')之类的方法,您会得到什么?您是否在 ping 测试结束时也获得了所有信息?如果这对您来说不是问题,您也许应该每次打印一个新行... -
@obchardon 实际上我没有;它按顺序输出到控制台。据我所知,
system('ping google.com')的行为与 Windows 控制台中的ping google.com完全相同。 -
最后加
&有用吗?exe_status = system('MySimulation.exe &'); -
你需要第二个输出参数:[status,results] = system('comp', '-echo');