child_process.spawnを使用してRubyスクリプトからストリーム出力を生きる方法

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

  •  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.timesloopに変更して、stdoutでは何も見えないようにすることで確認できます。無限ループケースは、実際には行う方法を理解しようとしているものです。

私は何をしていますか?

役に立ちましたか?

解決

$stdout.flushの後に、またはRubyスクリプトの先頭にputsを設定することで、$stdout.sync = trueを追加する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top