run 静态方法

Future<ProcessResult> run(
  1. String executable,
  2. List<String> arguments, {
  3. String? workingDirectory,
  4. Map<String, String>? environment,
  5. bool includeParentEnvironment = true,
  6. bool runInShell = false,
  7. Encoding? stdoutEncoding = systemEncoding,
  8. Encoding? stderrEncoding = systemEncoding,
})

启动一个进程,并以非交互方式运行到完成。进程运行的是带有指定 argumentsexecutable

建议为 executable 使用绝对路径,因为解析 executable 路径是平台特定的。在 Windows 上,无论是环境映射参数中的任何 PATH 设置还是在 workingDirectory 参数中设置的路径,在解析 executable 路径时都被忽略。

使用 workingDirectory 为进程设置工作目录。请注意,在有些平台上,在执行进程之前会更改目录,这可能会对使用可执行文件和参数的相对路径产生影响。

使用 environment 为进程设置环境变量。如果未设置,将继承父进程的环境。目前,仅支持 US-ASCII 环境变量,如果传入的变量包含 US-ASCII 范围之外的代码点,则可能发生错误。

如果 includeParentEnvironmenttrue,进程的环境将包括父进程的环境,其中 environment 优先。默认为 true

如果 runInShell 为 true,进程将通过系统 shell 来启动。在 Linux 和 OS X 上,使用 /bin/sh,而在 Windows 上使用 %WINDIR%\system32\cmd.exe

注意:在 Windows 上,如果 executable 是批处理文件 ('.bat' 或 '.cmd'),无论 runInShell 的值如何,操作系统都可能在系统 shell 中启动它。这可能导致根据 shell 规则解析参数。例如

void main() async {
  // Will launch notepad.
  await Process.run('test.bat', ['test&notepad.exe']);
}

用于将 stdoutstderr 解码为文本的编码通过 stdoutEncodingstderrEncoding 控制。默认编码是 systemEncoding。如果使用 null,则不会进行解码,并且 ProcessResult 将保留二进制数据。

返回一个 Future<ProcessResult>,它完成运行进程的结果,即退出代码、标准输出和标准输入。

以下代码使用 Process.run 在 Linux 系统的 test.dart 文件中搜索 main

var result = await Process.run('grep', ['-i', 'main', 'test.dart']);
stdout.write(result.stdout);
stderr.write(result.stderr);

实现

external static Future<ProcessResult> run(
    String executable, List<String> arguments,
    {String? workingDirectory,
    Map<String, String>? environment,
    bool includeParentEnvironment = true,
    bool runInShell = false,
    Encoding? stdoutEncoding = systemEncoding,
    Encoding? stderrEncoding = systemEncoding});