详解MATLAB的函数system()和shell转义字符“感叹号”,并利用它们实现在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 命令行窗口中正确运行的命令。

当我们不需要返回状态和结果时,可以用shell转义字符“!”代替函数system(),此时“system(command)”相当于“! command”。

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

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

运行结果如下图所示:
详解MATLAB的函数system()和shell转义字符“感叹号”,并利用它们实现在MATLAB中运行(调用)外部exe程序_第1张图片
详解MATLAB的函数system()和shell转义字符“感叹号”,并利用它们实现在MATLAB中运行(调用)外部exe程序_第2张图片

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

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

运行结果如下所示:
详解MATLAB的函数system()和shell转义字符“感叹号”,并利用它们实现在MATLAB中运行(调用)外部exe程序_第3张图片
详解MATLAB的函数system()和shell转义字符“感叹号”,并利用它们实现在MATLAB中运行(调用)外部exe程序_第4张图片
一个典型的应用是启动外部程序exe时,如果这个exe引用的文件不在M代码所在的文件夹下,将出现错误,比如下面这个代码调用外部程序exe时,exe程序会报错。

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

运行时输出如下:
详解MATLAB的函数system()和shell转义字符“感叹号”,并利用它们实现在MATLAB中运行(调用)外部exe程序_第5张图片
上图中的“error load image”是没有读到图片的报错,我的图片位置如下:
详解MATLAB的函数system()和shell转义字符“感叹号”,并利用它们实现在MATLAB中运行(调用)外部exe程序_第6张图片
怎么解决这个问题呢?把代码改成下面这样就行了:

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

此时运行结果如下:
详解MATLAB的函数system()和shell转义字符“感叹号”,并利用它们实现在MATLAB中运行(调用)外部exe程序_第7张图片
没有报错,并且输出了处理结果,如下图所示:
详解MATLAB的函数system()和shell转义字符“感叹号”,并利用它们实现在MATLAB中运行(调用)外部exe程序_第8张图片
通过这个示例代码还说明了我在标题中说到的如何在MATLAB中运行外部exe程序,所以,关于如何在MATLAB中运行外部exe程序,就不再赘述了。

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

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

上面的代码运行后虽然是打开了系统的记事本,但是MATLAB一直处于等待状态,只有关闭打开的记事本才可以继续运行MATLAB剩下的代码,这显然这是我们不希望的。如下图所示:
详解MATLAB的函数system()和shell转义字符“感叹号”,并利用它们实现在MATLAB中运行(调用)外部exe程序_第9张图片
我们在命令的后面加上“&”号,即可解决这个问题,如下图所示:

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

运行结果如下图所示:
详解MATLAB的函数system()和shell转义字符“感叹号”,并利用它们实现在MATLAB中运行(调用)外部exe程序_第10张图片
从上面的截图可以看出,这样修改后,在打开记事本后,程序立即退出并继续运行剩下的MATLAB代码。

你可能感兴趣的:(MATLAB基础,matlab-system,MATLAB运行外部程序,MATLAB调用外部程序)