run 静态方法
启动一个进程,并以非交互方式运行到完成。进程运行的是带有指定 arguments
的 executable
。
建议为 executable
使用绝对路径,因为解析 executable
路径是平台特定的。在 Windows 上,无论是环境映射参数中的任何 PATH
设置还是在 workingDirectory
参数中设置的路径,在解析 executable
路径时都被忽略。
使用 workingDirectory
为进程设置工作目录。请注意,在有些平台上,在执行进程之前会更改目录,这可能会对使用可执行文件和参数的相对路径产生影响。
使用 environment
为进程设置环境变量。如果未设置,将继承父进程的环境。目前,仅支持 US-ASCII 环境变量,如果传入的变量包含 US-ASCII 范围之外的代码点,则可能发生错误。
如果 includeParentEnvironment
为 true
,进程的环境将包括父进程的环境,其中 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¬epad.exe']);
}
用于将 stdout
和 stderr
解码为文本的编码通过 stdoutEncoding
和 stderrEncoding
控制。默认编码是 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});