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

时间:2018-07-05 17:01:01

标签: process lua dart stdin child-process

我有一个名为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'));
  });
}

我有一个lua程序,名为file.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

但它仍然永久挂起。

所以我有2个问题:

1)lua进程为什么不接收飞镖进程写入的字节?

2)是否有一种超级简单的方法来使lua不受阻塞地读取?这样lua就会轮询而不是阻止。

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

1 个答案:

答案 0 :(得分:0)

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