详解MATLAB的函数system(),并利用它实现在MATLAB中运行(调用)外部exe程序

有时候我们需要在MATLAB中运行外部的exe程序,那么怎么实现这个功能呢?

非常简单,使用MATLAB的函数system()即可实现。

函数system()将启动新的 cmd/shell 进程→执行cmd命令→退出进程,然后返回到 MATLAB 进程。

其语法有以下三种:

status = system(command)
[status,cmdout] = system(command)
[status,cmdout] = system(command,'-echo')

说简单直白点,函数system()实际上就是启动一个cmd窗口,然后在窗口中输入命令“command”,并回车。
参数意义如下:
command—准备在cmd中运行的命令;
status—命令执行状态,当命令成功执行时,status 为 0,否则,status 为非零整数。
cmdout—命令执行后的输出信息。
看到这里,想必大家都知道了第一种用法和第二用法是怎么回事。
第三种用法可能大家都不知道,这里说下第三种用法,第三种用法是在MATLAB的命令行窗口中显示cmd的命令输出,这样当MATLAB执行函数system()时,其命令行窗口也就成为了cmd的命令行窗口。该语法适合需要用户输入并在 MATLAB 命令行窗口中正确运行的命令。

注意:函数system()启动的这个cmd窗口的默认路径就是M文件所在的路径,这一点可以用下面的代码验证:

command = 'cd'; %cd是cmd中用于显示当前路径的命令
[status,cmdout] = system(command,'-echo');

运行结果如下图所示:

如果不希望用这个默认路径,可以用加上cd命令进入相应的路径,示例代码如下:

command = 'cd F:\Downloads  && dir'; %dir是cmd中用于显示当前目录下有哪些文件
[status,cmdout] = system(command,'-echo');

运行结果如下所示:


一个典型的应用是启动外部程序exe时,如果这个exe引用的文件不在M代码所在的文件夹下,将出现错误,比如下面这个代码调用外部程序exe时,exe程序会报错。

command = 'F:\Temp\Release_eye_detect\V-002.exe'; %dir是cmd中用于显示当前目录下有哪些文件
[status,cmdout] = system(command,'-echo');

运行时输出如下:

上图中的“error load image”是没有读到图片的报错,我的图片位置如下:

怎么解决这个问题呢?把代码改成下面这样就行了:

command = 'cd F:\Temp\Release_eye_detect && F:\Temp\Release_eye_detect\V-002.exe'; %dir是cmd中用于显示当前目录下有哪些文件
[status,cmdout] = system(command,'-echo');

此时运行结果如下:

没有报错,并且输出了处理结果,如下图所示:

通过这个示例代码还说明了我在标题中说到的如何在MATLAB中运行外部exe程序,所以,关于如何在MATLAB中运行外部exe程序,就不再赘述了。

有时候,我们希望打开一个程序后,比如打开记事本时,我们希望打开记事本后就退出返回至 MATLAB,让MATLAB继续执行剩下的程序,这时候我们就要在命令的结尾加上“&”号。
示例如下:

command = 'notepad'; %cd是cmd中用于显示当前路径的命令
[status,cmdout] = system(command,'-echo');

上面的代码运行后虽然是打开了系统的记事本,但是MATLAB一直处于等待状态,只有关闭打开的记事本才可以继续运行MATLAB剩下的代码,这显然这是我们不希望的。如下图所示:

我们在命令的后面加上“&”号,即可解决这个问题,如下图所示:

command = 'notepad &'; %cd是cmd中用于显示当前路径的命令
[status,cmdout] = system(command,'-echo');

运行结果如下图所示:

从上面的截图可以看出,这样修改后,在打开记事本后,程序立即退出并继续运行剩下的MATLAB代码。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
上一篇 2022年5月20日 下午12:49
下一篇 2022年5月20日 下午12:53
本站注重文章个人版权,不会主动收集付费或者带有商业版权的文章,如果出现侵权情况只可能是作者后期更改了版权声明,如果出现这种情况请主动联系我们,我们看到会在第一时间删除!本站专注于人工智能高质量优质文章收集,方便各位学者快速找到学习资源,本站收集的文章都会附上文章出处,如果不愿意分享到本平台,我们会第一时间删除!