Dart:如何通过流将数据从一个进程传递到另一个进程

问题描述 投票:1回答:1

我需要具有从dart启动两个进程,从第一个进程读取输入,在dart中操纵输出,然后将数据发送到第二个进程的能力。

注意:在此示例中,我陈述了两个过程,但实际上,我可能需要创建一条涉及任何数量的过程的管道。

这两个进程可能会长时间运行(假设数分钟),并且当这些进程处理数据时,输出必须可用(想想尾-f)。

为了强调最后一点,该过程可能会输出大量数据,因此数据无法存储在内存中,因此我尝试了流方法。

我已经尝试了以下内容,但是我对流媒体没有经验,所以我不确定自己是否走上了正确的轨道。

https://dartpad.dev/3ad46c7e28c80f6735a9ee350091d509

dart stream command-line-interface
1个回答
0
投票

您可以使用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;
}
© www.soinside.com 2019 - 2024. All rights reserved.