使用Matlab在后台异步调用系统功能

时间:2013-08-07 18:38:18

标签: matlab asynchronous dos

我可以使用Matlab调用系统函数,如下所示:

system('dir');

这将在matlab的标准输出上显示结果并同步运行。

我可以使用:

捕获变量中的输出
[status,stdout]  = dos('dir');

这显示没有输出,但仍然同步运行。

我可以使用;

运行脚本异步
system('dir &');

这会弹出一个命令窗口,然后在前台运行并在功能完成时保持打开状态。

想要做的事情是在背景中异步运行命令,并在完成后关闭。有没有办法做到这一点?

我在Windows 7上

2 个答案:

答案 0 :(得分:4)

尝试使用Windows start命令更好地控制新进程的启动方式。它将启动一个新流程并返回。例如:

[status,out] = system('start /b /min myprogram.exe');

如果start选项不够,您可以使用Java java.lang.Process或.NET System.Diagnostics.Process类从代码中直接启动进程。两者都可以直接从Matlab代码调用,并允许您启动一个新进程,让它以异步方式运行,并检查其状态。基本上,这是Matlab的system()的替代品,它可以让您对正在启动的过程进行更精细的控制。特别是,.NET将允许您指定窗口状态,是否使用shell来处理命令,等等。而IIRC,Java就足以启动一个win32控制台应用程序(我假设你的exe编译为),没有出现新窗口。

如果您想要对流程进行一些额外的监控和交互,并且愿意编写一些Java代码,您可以从Matlab的嵌入式JVM中的新Java工作线程运行该流程。

答案 1 :(得分:3)

使用Matlab的Timer对象。它以异步方式运行。您还可以指定退出函数StopFcn