Main Content

system

执行操作系统命令并返回输出

说明

status = system(command) 调用操作系统执行指定的命令。操作会等待命令执行完毕,然后再将命令的退出状态返回到 status 变量。

该函数将启动新的 cmd/shell 进程、执行 command、退出进程,然后返回到 MATLAB® 进程。command 对系统环境所做的更新对 MATLAB 不可见。

示例

[status,cmdout] = system(command) 还会将命令的输出返回到 cmdout。该语法对不需要用户输入的命令最有用,例如 dir

[status,cmdout] = system(command,'-echo') 还在 MATLAB 命令行窗口中显示(回显)命令输出。该语法对需要用户输入并在 MATLAB 命令行窗口中正确运行的命令最有用。

[status,cmdout] = system(___,EnvName1,EnvVal1,...,EnvNameN,EnvValN) 设置操作系统环境变量的值。如果 EnvName 已作为环境变量存在,则 system 会将其当前值替换为 EnvVal。如果 EnvName 不存在,则 system 会创建一个名为 EnvName 的环境变量,并将 EnvVal 赋给该变量。

systemEnvNameEnvVal 原样传递给操作系统。特殊字符(如 ;/:$%)在 EnvVal 中未展开。

示例

全部折叠

使用 cd 命令显示当前文件夹。status 为零表示命令已成功完成。MATLAB 将在 cmdout 中返回一个包含当前文件夹的字符向量。

command = 'cd';
[status,cmdout] = system(command)

要创建一个名为 mynew 的文件夹,请调用 mkdir 命令并将退出状态保存到一个变量。status 为零表示 mynew 文件夹已成功创建。

command = 'mkdir mynew';
status = system(command)

通过将符号 & 附加到 notepad 命令,打开 Microsoft® 记事本并立即将退出状态返回至 MATLAB。status 为零表示记事本已成功启动。

status = system('notepad &')

执行 dir 命令并查看退出状态和命令输出。cmdout 包含命令输出。

[~,cmdout] = system('dir');

尝试执行名为 badcmd 的命令。然后,查看 statusresults 输出参量。调用无效的命令时,status 表示失败并且 results 包含 DOS 错误消息。

[status,results] = system('badcmd')

列出当前已登录的所有用户,然后保存命令退出状态和输出。然后,查看该状态。status 为零表示命令已成功完成。MATLAB® 将在 cmdout 中返回用户列表。

command = 'who';
[status,cmdout] = system(command);
status
status = 0

输入参数

全部折叠

操作系统命令,指定为字符串或字符向量。command 在系统 shell 中执行,它可能不是您用于启动 MATLAB 的 shell。要指定多项操作系统命令,请使用 cmdsep 来提供特定于平台的命令分隔符。

示例: "dir"

示例: "ls"

环境变量名称,指定为字符串标量或字符向量。

name 中的最大字符数为 215 - 2,即 32,766。如果 name 包含 = 字符,则 system 会引发错误。名称中包含 = 的环境变量的行为未明确定义。

示例: "PATH"

环境变量值,指定为字符串标量、字符向量或 missing。通过将环境变量的值设置为 missing 来删除该环境变量。

示例: "C:\TEMP"

输出参量

全部折叠

命令退出状态,以 0 或非零整数的形式返回。当命令成功执行时,status0。否则,status 为非零整数。

  • 如果 command 包含字符 &,则 statuscommand 启动时的退出状态。

  • 如果 command 不包含字符 &,则 statuscommand 命令完成时的退出状态。

操作系统命令的输出,以字符向量形式返回。系统 shell 可能无法正确表示非 Unicode® 字符。

局限性

  • MATLAB 会将字符转换为您的操作系统 shell 接受的编码。command 输出会转换为 MATLAB 编码以显示在命令行窗口中。如果您执行命令得到意外结果,则可在操作系统提示符下直接输入 command 参量,查看操作系统对您输入的处理方式。

  • system 命令执行期间,不会调用回调函数。

详细信息

全部折叠

Windows 提示和限制

  • MS-DOS® 不支持 UNC 路径名称。因此,如果当前文件夹使用 UNC 路径名称,则通过依赖于当前文件夹的 DOS command 运行 system 会失败。要解决该局限性,请在调用 system 之前将文件夹更改为映射驱动器。

  • 您可以在 system 命令中覆盖环境变量。例如,以下代码将 PATH 变量设置为 myPath,然后用该值调用系统命令 dosCommand

    system(['set PATH=' myPath ' && ' dosCommand])
  • 要在后台执行操作系统命令,请在 command 参量中加入尾随字符 &。例如,键入 'notepad &'。退出状态将立即返回至 status 变量。该语法对在运行时需要交互式用户命令输入但未在 MATLAB 命令行窗口中正确运行的控制台程序很有用。

    如果 command 包含结尾 & 字符,则 cmdout 为空。

  • system 命令使用的凭据与用于启动 MATLAB 的凭据相同。要将程序 myprogram.exe 的凭据设置为需要管理员权限,请键入:

    system('cmd /C myprogram.exe');

UNIX 提示和限制

  • MATLAB 使用 shell 程序执行指定的命令。MATLAB 通过检查系统上的环境变量来确定使用哪个 shell 程序。MATLAB 首先检查 MATLAB_SHELL 变量,如果该变量为空或未定义,然后将检查 SHELL。如果 SHELL 也为空或未定义,则 MATLAB 将使用 /bin/sh

  • system 函数默认将 stdin 重定向到 command。当 system 函数在执行时,该重定向操作还会将 MATLAB 脚本命令和键盘超前键入缓冲区传递到所调用的命令。如果 system 未立即执行完,此行为可能会导致输出损坏。要禁用 stdin 和超前键入重定向,请在对所调用命令的调用中包括格式化文本 < /dev/null

  • 您可以在 system 命令中覆盖环境变量。语法取决于 UNIX® shell。例如,使用 BASH shell,以下代码将 PATH 变量设置为 myPath,然后使用该值调用系统命令 command

    system(['export PATH=' myPath ' ; ' command])
  • 要在后台执行操作系统命令,请在 command 参量中加入尾随字符 &。例如,键入 'emacs &'。退出状态将立即返回至 status 变量。该语法对在运行时需要交互式用户命令输入但未在 MATLAB 命令行窗口中正确运行的控制台程序很有用。

    如果 command 包含结尾 & 字符,则 cmdout 为空。

版本历史记录

在 R2006a 之前推出

全部展开