有时候我们需要在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 命令行窗口中正确运行的命令。
当我们不需要返回状态和结果时,可以用shell转义字符“!”代替函数system(),此时“system(command)”相当于“! command”。
注意:函数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');