我可以使用Matlab调用系统函数,如下所示:
system('dir');
这将在matlab的标准输出上显示结果并同步运行。
我可以使用:
捕获变量中的输出[status,stdout] = dos('dir');
这显示没有输出,但仍然同步运行。
我可以使用;
运行脚本异步system('dir &');
这会弹出一个命令窗口,然后在前台运行并在功能完成时保持打开状态。
我想要做的事情是在背景中异步运行命令,并在完成后关闭。有没有办法做到这一点?
我在Windows 7上
答案 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
。