child_process.spawnを使用してRubyスクリプトからストリーム出力を生きる方法
-
20-12-2019 - |
質問
私が理解しているものから、これはうまくいくべきですが、これまでのところ運さない。この質問を投稿してください。私は本当に愚かなことをしています。私は:
hello.rb
#!/usr/bin/env ruby
3.times do
puts 'hello'
sleep 1
end
.
tail.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 Hellosがstdoutに印刷されますが、の後、ループは完了します。これを検証するには、無限ループの3.times
をloop
に変更して、stdout
では何も見えないようにすることで確認できます。無限ループケースは、実際には行う方法を理解しようとしているものです。
私は何をしていますか?
解決
$stdout.flush
の後に、またはRubyスクリプトの先頭にputs
を設定することで、$stdout.sync = true
を追加する必要があります。
所属していません StackOverflow