process - 父进程无法正确写入 lua 子进程标准输入
问题描述
我有一个名为 file.dart 的 dart 程序,如下所示:
import 'dart:io';
import 'dart:convert';
main() {
final file = Directory.current.path + '/file.lua';
Process.start('lua', [file]).then((Process process) {
print('opened process');
process.stdout.pipe(stdout);
process.stdin.add([4]);
process.stdin.flush().then((blah) => print('flushed'));
});
}
我有一个名为 file.lua 的 lua 程序,如下所示:
print('starting to read')
local data = io.stdin:read()
print('i read it ', data)
当我运行飞镖程序时,会发生以下情况:
$ dart file.dart
opened process
flushed
starting to read
然后它就永远坐在那里。lua 读取是阻塞的,它永远不会拾取 dart 进程写入的字节。
我对飞镖过程进行了延迟,以便它在一秒钟后写入并刷新。运行的输出是
$ dart file.dart
opened process
starting to read
flushed
但它仍然永远挂断。
所以我有两个问题:
1)为什么lua进程不会拾取dart进程写入的字节?
2)有没有一种超级简单的方法可以让lua读取非阻塞?这样lua就会轮询而不是阻塞。
请在回答时输入您正在回答的问题的编号。谢谢!
解决方案
我通过在传输结束时发送 '\n\ 或换行字节解决了这个问题!
推荐阅读
- apache-beam - Apache Beam 上的 Spark.ml
- javascript - How to run the Div element when the page load is complete
- java - Thorntail 示例/API 不兼容
- java - 想要在用户使用按钮之前暂停代码
- angular - 将 mat-table 与 observable 和 HTTP 请求集成
- c++ - 我可以在所有真/所有假之间合法地 memset 布尔结构吗?
- java - 使用没有选择语句的 selenium webdriver 从组合框中选择
- javascript - 如何在Javascript中获取特定坐标(x,y)周围的坐标
- sql-server - 脚本任务损坏 - 从 SQL Server 2016 升级到 SQL Server 2016 SP2 后 SSISDB 执行错误
- kubernetes - 从 Kubernetes Pod 连接到 VM