我需要具有从dart启动两个进程,从第一个进程读取输入,在dart中操纵输出,然后将数据发送到第二个进程的能力。
注意:在此示例中,我陈述了两个过程,但实际上,我可能需要创建一条涉及任何数量的过程的管道。
这两个进程可能会长时间运行(假设数分钟),并且当这些进程处理数据时,输出必须可用(想想尾-f)。
为了强调最后一点,该过程可能会输出大量数据,因此数据无法存储在内存中,因此我尝试了流方法。
我已经尝试了以下内容,但是我对流媒体没有经验,所以我不确定自己是否走上了正确的轨道。
您可以使用Stream.pipe:
import 'dart:async';
import 'dart:convert';
import 'dart:io';
void main() async {
var ls = await start('ls');
var head = await start('head');
ls.stdout
.transform(utf8.decoder)
.transform(const LineSplitter())
.map((line) => '1: $line\n')
.transform(utf8.encoder)
.pipe(head.stdin);
await head.stdout.pipe(stdout);
}
Future<Process> start(String command) async {
var process = Process.start(
command,
[],
);
return process;
}