如何使用child_process.spawn实时流式传输ruby脚本的输出



据我所知,这应该可行,但到目前为止我运气不佳。发布这个问题希望我在做一些非常愚蠢的事情。我有:

你好.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个hello被打印到stdout,但在之后,循环就完成了。您可以通过将无限循环的3.times更改为仅loop来验证这一点,而在stdout中看不到任何内容。无限循环的情况实际上是我试图弄清楚如何做的

我做错了什么?

您应该尝试在puts之后添加$stdout.flush,或者在ruby脚本的开头设置$stdout.sync = true

相关内容

  • 没有找到相关文章

最新更新