当监听shell进程输出的长字符串时,我收到的数据分为两块,如何才能得到完整的文本?
下面是所讨论的代码:
int i = 0;
Process.start('perl', ['print_text.pl']).then((Process p) {
p.stdout.transform(UTF8.decoder).listen((data) => print("${i++} ${data}"));
p.stdin.writeln('print');
});
运行此代码的结果为:
0文本.....
1个文本.....
我已经将此问题报告为bug here。您可以运行报告附件中的示例应用程序来查看此问题。
3条答案
按热度按时间c2e8gylq1#
尝试使用UTF8.decodeStream()。
q1qsirdb2#
我通过执行以下操作解决了此问题:
1.在shell脚本中,用随机数标记shell输出的开始和结束。
1.在Dart中,将所有块连接在一起,并使用标记检查是否得到了完整的结果。
此解决方案不需要退出进程来获得进程结果。
这是一个示例代码:
9njqaruj3#
目前还不清楚实际的问题是什么,但我假设这就是您正在寻找的: