Как вывести поток в реальном времени из Ruby-скрипта с помощью child_process.spawn
-
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-скрипта.
Не связан с StackOverflow