首页 > 解决方案 > 父进程无法正确写入 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就会轮询而不是阻塞。

请在回答时输入您正在回答的问题的编号。谢谢!

标签: processluadartstdinchild-process

解决方案


我通过在传输结束时发送 '\n\ 或换行字节解决了这个问题!


推荐阅读