【发布时间】:2015-10-21 04:46:23
【问题描述】:
我想运行一个进程,并将进程的标准输出流式传输到控制台。最好(最有效、最容易理解、代码行最少)的方法是什么?
例如:
var process = await Process.start(exec, args);
我想尽快查看任何可用的标准输出内容。
谢谢!
【问题讨论】:
我想运行一个进程,并将进程的标准输出流式传输到控制台。最好(最有效、最容易理解、代码行最少)的方法是什么?
例如:
var process = await Process.start(exec, args);
我想尽快查看任何可用的标准输出内容。
谢谢!
【问题讨论】:
import 'dart:io';
void main() async {
var process = await Process.start(exec, args);
process.stdout.pipe(stdout);
}
或者使用then:
import 'dart:io';
void main() {
Process.start(exec, args).then(
(process) => process.stdout.pipe(stdout)
);
}
【讨论】:
.pipe() 本身只是调用了addStream() ;-),但是另外,当源流无错误关闭时,它也会自动关闭目标流。
这是一种方法:
var process = await Process.start(exec, args);
stdout.addStream(process.stdout);
请注意,我将process.stdout 流添加到来自dart:io 的普通stdout 流中。
【讨论】:
为了完整起见,您可以在Process.start 中使用mode 参数并传递ProcessStartMode.inheritStdio
var process = await Process.start(
command,
args,
mode: ProcessStartMode.inheritStdio
);
但请注意,正如模式名称所暗示的那样,这会将所有 stdio 从进程(stdin、stdout 和 stderr)传递到默认 stdout,这可能会导致意外结果,因为也会传递 sigterms 之类的东西。
【讨论】: