Родительский процесс не будет правильно писать в дочерний процесс lua. - PullRequest
0 голосов
/ 05 июля 2018

У меня есть программа 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 file.dart 
opened process
starting to read
flushed

но он все еще зависал навсегда.

Итак, у меня есть 2 вопроса:

1) Почему процесс lua не берет байт, записанный процессом dart?

2) Есть ли супер-простой способ сделать чтение lua неблокирующим? Так что Луа будет опрашивать вместо блока.

Пожалуйста, укажите номер вопроса, на который вы отвечаете, когда отвечаете на него. Спасибо!

1 Ответ

0 голосов
/ 08 июля 2018

Я решил эту проблему, отправив '\ n \ или байт новой строки в конце моих передач!

...