父进程无法正确向lua子进程的stdin写入

我有一个Dart程序,名为file.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'));
  });
}

我有一个Lua程序,名为file.lua,代码如下:

print('starting to read')
local data = io.stdin:read()
print('i read it ', data)

当我运行Dart程序时,会发生以下情况:

$ dart file.dart
opened process
flushed
starting to read

然后它就一直停在那里。Lua阻塞读取,它从未接收到Dart进程写入的字节。

我在Dart进程中加了延迟,所以它在一秒钟后写入和刷新。运行它的输出是

$ dart file.dart
opened process
starting to read
flushed

但它仍然永远挂起。

所以我有两个问题:

1)为什么Lua进程无法接收到Dart进程写入的字节?

2)有没有一种超级简单的方法可以使Lua阻塞读取变成非阻塞读取?使Lua轮询而不是阻塞。

请在回答问题时将您回答的问题编号放在前面。谢谢!

点赞
用户7121762
用户7121762

我是通过在传输结束时发送 '\n\ 或换行符来解决这个问题的!

2018-07-07 22:34:23