如何设置Dart IO进程以将现有流用于其stdin?

如何设置Dart IO进程以将现有流用于其stdin?,dart,dart-io,Dart,Dart Io,我正在使用Process.start创建一个进程,我有点被stdingetter卡住了。理想情况下,我在别处设置了一个StreamController,我希望将其字符串流传递到stdin。但是与Process.stdin交互的复杂示例并不多,因此我不知道除了对stdin进行写操作之外,如何做其他事情 所以我有这样的东西,我可以添加字符串消息到: StreamController processInput=新的StreamController.broadcast(); 我想这样做: Proces

我正在使用Process.start创建一个进程,我有点被stdingetter卡住了。理想情况下,我在别处设置了一个StreamController,我希望将其字符串流传递到stdin。但是与Process.stdin交互的复杂示例并不多,因此我不知道除了对stdin进行写操作之外,如何做其他事情

所以我有这样的东西,我可以添加字符串消息到:

StreamController processInput=新的StreamController.broadcast();
我想这样做:

Process.start(可执行文件,args,workingDirectory:dir.path,runInShell:true){
进程.stdout
.变换(UTF8.解码器)
.listen((数据){
s、 添加('[[CONSOLE_OUTPUT]]'+数据);
});
process.stdin.addStream(input.stream);
});
我意识到
addStream()
想要
Stream
,尽管我不知道为什么会是这样。

这可能行得通

process.stdin.addStream(UTF8.encoder.bind(input.stream));
stdin
对象是一个
IOSink
,因此它有一个
write
字符串方法。这将默认为UTF-8编码字符串。 因此,与其

process.stdin.addStream(input.stream)
你能行

IOSink stdin=process.stdin;
input.stream.listen(stdin.write,onDone:stdin.close);
您可能需要一些错误处理,可能需要在写入之间刷新stdin,因此:

input.stream.listen(
(字符串数据){
标准写入(数据);
stdin.flush();
}, 
onError:myErrorHandler,
onDone:stdin.close);
或者,您可以手动执行UTF-8编码,以获取
addStream
期望的整数列表流:

process.stdin.addStream(input.stream.transform(UTF8.encoder))

stdin
需要一个
List
的原因是进程通信的核心是字节。发送文本需要发送方和接收方预先商定编码,以便他们能够以相同的方式解释字节。

发送/接收对编码方法的理解是有意义的。谢谢