gpt4 book ai didi

dart - 如何将Dart IO流程设置为将现有Stream用于其stdin?

转载 作者:行者123 更新时间:2023-12-03 03:18:44 26 4
gpt4 key购买 nike

我正在使用Process.start创建一个Process,并且对stdin getter有点困惑。理想情况下,我在其他地方设置了StreamController,我想将其Strings流传递到stdin中。但是,没有太多与Process.stdin进行交互的复杂示例,因此我不确定除了对stdin的writeln之外,该如何做。

所以我有这样的事情,我可以添加String消息到:

  StreamController<String> processInput = new StreamController<String>.broadcast();

我想做这样的事情:

  Process.start(executable, args, workingDirectory: dir.path, runInShell: true).then((Process process) {
process.stdout
.transform(UTF8.decoder)
.listen((data) {
s.add('[[CONSOLE_OUTPUT]]' + data);
});
process.stdin.addStream(input.stream);
});

我知道 addStream()想要 Stream<List<int>>,尽管我不确定为什么会这样。

最佳答案

stdin对象是IOSink,因此它具有用于字符串的write方法。这将默认为对字符串进行UTF-8编码。
所以,代替

process.stdin.addStream(input.stream)

你可以做

IOSink stdin = process.stdin;
input.stream.listen(stdin.write, onDone: stdin.close);

您可能需要一些错误处理,可能在两次写入之间刷新标准输入,所以也许:

input.stream.listen(
(String data) {
stdin.write(data);
stdin.flush();
},
onError: myErrorHandler,
onDone: stdin.close);

或者,您可以手动进行UTF-8编码,以获得 addStream期望的整数列表流:

process.stdin.addStream(input.stream.transform(UTF8.encoder))
stdin期望 List<int>的原因是,过程通信的核心只是字节。发送文本需要发送者和接收者预先约定编码,因此它们可以用相同的方式解释字节。

关于dart - 如何将Dart IO流程设置为将现有Stream用于其stdin?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28035515/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com