2

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

system('dir');

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

我可以使用以下方法捕获变量中的输出:

[status,stdout]  = dos('dir');

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

我可以使用异步运行脚本;

system('dir &');

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

想做的是在后台异步运行命令并在完成后关闭。有没有办法做到这一点?

我在windows 7

4

2 回答 2

4

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

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

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

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

于 2013-08-10T18:01:49.680 回答
3

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

于 2013-08-07T19:08:30.250 回答