dart:io
库中Process
类的用法介绍如下。
执行程序的手段。
使用静态 start 和 run 方法启动新进程。 run 方法以非交互方式执行该过程直至完成。相反, start 方法允许您的代码与正在运行的进程进行交互。
使用 run 方法启动一个进程
以下代码示例使用 run 方法创建一个运行 UNIX 命令 ls
的进程,该命令列出目录的内容。当进程终止时,run 方法以ProcessResult 对象结束。这提供了对进程的输出和退出代码的访问。 run 方法不返回Process
对象;这可以防止您的代码与正在运行的进程进行交互。
import 'dart:io';
main() async {
// List all files in the current directory in UNIX-like systems.
var result = await Process.run('ls', ['-l']);
print(result.stdout);
}
使用 start 方法启动进程
以下示例使用 start 创建进程。 start 方法为Process
对象返回Future。当 future 完成时,进程开始,你的代码可以与进程交互:写入标准输入,监听标准输出,等等。
以下示例启动 UNIX cat
实用程序,当没有给定 命令行 参数时,它会回显其输入。程序写入进程的标准输入流并从其标准输出流打印数据。
import 'dart:io';
import 'dart:convert';
main() async {
var process = await Process.start('cat', []);
process.stdout
.transform(utf8.decoder)
.forEach(print);
process.stdin.writeln('Hello, world!');
process.stdin.writeln('Hello, galaxy!');
process.stdin.writeln('Hello, universe!');
}
标准 I/O 流
如前面的代码示例所示,您可以通过 getter stdout 与 Process
的标准输出流进行交互,并且可以通过 getter stdin 与 Process
的标准输入流进行交互。此外,Process
提供了一个 getter stderr 用于使用 Process
的标准错误流。
Process
的流与当前程序的顶级流不同。
退出代码
调用exitCode方法获取进程的退出码。退出代码指示程序是成功终止(通常以退出代码 0 表示)还是出现错误。
如果使用 start 方法,exitCode 可通过 Process
对象上的 future 获得(如下例所示)。如果使用 run 方法,则 exitCode 可通过 ProcessResult 实例上的 getter 获得。
import 'dart:io';
main() async {
var process = await Process.start('ls', ['-l']);
var exitCode = await process.exitCode;
print('exit code: $exitCode');
}
相关用法
- Dart Process.start用法及代码示例
- Dart Process.run用法及代码示例
- Dart Point用法及代码示例
- Dart PluginArray.last用法及代码示例
- Dart Point.magnitude用法及代码示例
- Dart Point.operator_minus用法及代码示例
- Dart Platform.localeName用法及代码示例
- Dart Point.distanceTo用法及代码示例
- Dart Point.operator_equals用法及代码示例
- Dart Point.squaredDistanceTo用法及代码示例
- Dart Pattern.matchAsPrefix用法及代码示例
- Dart Pattern.allMatches用法及代码示例
- Dart Point.operator_plus用法及代码示例
- Dart Platform用法及代码示例
- Dart PluginArray.elementAt用法及代码示例
- Dart Point.operator_multiply用法及代码示例
- Dart PluginArray.first用法及代码示例
- Dart PluginArray.length用法及代码示例
- Dart MapMixin.containsKey用法及代码示例
- Dart Iterator用法及代码示例
- Dart AttributeClassSet.intersection用法及代码示例
- Dart num.sign用法及代码示例
- Dart TransformList.last用法及代码示例
- Dart FileList.first用法及代码示例
- Dart CanvasRenderingContext2D.drawImageScaledFromSource用法及代码示例
注:本文由纯净天空筛选整理自dart.dev大神的英文原创作品 Process class。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。