Dart 不缓冲进程标准输出(告诉进程它是来自终端的 运行)
Dart don't buffer process stdout (tell process that it is running from a terminal)
我试图在 dart 中 运行 二进制文件宽度 Process.start 并将其输出重定向到 stdout 和管道 stdin 到进程。
这是我的代码:
import 'dart:io';
import 'dart:convert';
main() async {
Process.start('./test.bin', []).then((p) {
p.stdout.listen((bytes) {
stdout.add(bytes);
stdout.flush();
});
stdin.pipe(p.stdin);
});
}
问题是它只在进程终止后刷新进程的标准输出。
在互联网上搜索后我发现:“这是由 libc 引起的,它在未连接到终端时默认将 stdout int 缓冲模式。”
如何从终端告诉进程它正在 运行ning?
我的这个项目的目标是在 web 应用程序中有一个终端,它与后端的这个过程 运行ning 交互,所以它将 运行ning 在终端上,但过程是显然没有意识到这一点。
我正在回答我自己的问题,以防有人发现这个 post。
我最终在这个库的帮助下用 nodejs 编写了后端 (https://www.npmjs.com/package/node-pty)
但我也找到了类似的 dart 库 (https://pub.dev/packages/pty)
我试图在 dart 中 运行 二进制文件宽度 Process.start 并将其输出重定向到 stdout 和管道 stdin 到进程。
这是我的代码:
import 'dart:io';
import 'dart:convert';
main() async {
Process.start('./test.bin', []).then((p) {
p.stdout.listen((bytes) {
stdout.add(bytes);
stdout.flush();
});
stdin.pipe(p.stdin);
});
}
问题是它只在进程终止后刷新进程的标准输出。
在互联网上搜索后我发现:“这是由 libc 引起的,它在未连接到终端时默认将 stdout int 缓冲模式。”
如何从终端告诉进程它正在 运行ning?
我的这个项目的目标是在 web 应用程序中有一个终端,它与后端的这个过程 运行ning 交互,所以它将 运行ning 在终端上,但过程是显然没有意识到这一点。
我正在回答我自己的问题,以防有人发现这个 post。
我最终在这个库的帮助下用 nodejs 编写了后端 (https://www.npmjs.com/package/node-pty)
但我也找到了类似的 dart 库 (https://pub.dev/packages/pty)