Как вывести поток в реальном времени из Ruby-скрипта с помощью child_process.spawn

StackOverflow https://stackoverflow.com//questions/23001033

  •  20-12-2019
  •  | 
  •  

Вопрос

Насколько я понимаю, это должно сработать, но мне пока не повезло.Публикую этот вопрос в надежде, что делаю что-то действительно глупое.У меня есть:

привет.рб

#!/usr/bin/env ruby

3.times do
  puts 'hello'
  sleep 1
end

хвост.js

var cp = require('child_process');
var tail = cp.spawn('./hello.rb');

tail.stdout.pipe(process.stdout);

/* Also tried this: */
tail.stdout.on('data', function(data) {
  console.log(data.toString())
});

hello.rb является исполняемым.

Когда я бегу node tail.js, на стандартный вывод выводятся 3 приветствия, но после, цикл завершается.Вы можете убедиться в этом, изменив 3.times чтобы просто loop для бесконечного цикла и ничего не видя в stdout.На самом деле случай бесконечного цикла — это то, что я пытаюсь понять, как это сделать.

Что я делаю не так?

Это было полезно?

Решение

Вы должны попробовать либо добавить $stdout.flush после твоего puts или установив $stdout.sync = true в начале вашего Ruby-скрипта.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top