Comment diffuser en direct la sortie du script Ruby à l'aide de child_process.spawn
-
20-12-2019 - |
Question
D'après ce que j'ai compris, cela devrait fonctionner, mais pas de chance pour moi jusqu'à présent.Je poste cette question en espérant que je fais quelque chose de vraiment stupide.J'ai:
bonjour.rb
#!/usr/bin/env ruby
3.times do
puts 'hello'
sleep 1
end
queue.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
est exécutable.
Quand je cours node tail.js
, 3 bonjour sont imprimés sur la sortie standard, mais après, la boucle se termine.Vous pouvez le vérifier en modifiant 3.times
pour juste loop
pour une boucle infinie et ne rien voir dedans stdout
.Le cas de la boucle infinie est en fait ce que j'essaie de comprendre comment faire.
Qu'est-ce que je fais mal?
La solution
Vous devriez essayer soit d'ajouter $stdout.flush
après votre puts
ou en définissant $stdout.sync = true
au début de votre script Ruby.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow