2014-04-10 103 views
0

从我所了解的情况来看,这应该可行,但对我来说目前还没有运气。发布这个问题希望我做一些非常愚蠢的事情。我有:如何使用child_process.spawn生成从ruby脚本输出流输出

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个hello被打印到标准输出,但,循环完成。您可以通过将更改为loop进行无限循环验证,并在stdout中看不到任何内容。无限循环的情况实际上是我试图找出如何去做的。

我在做什么错?

回答

1

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

+0

工作,比你!你能补充一点关于那是什么吗? – mehulkar

+0

我还编辑了问题标题/标签,以反映这与ruby比'child_process'或节点有关。 – mehulkar

+0

'$ stdout.flush'刷新当前的stdout缓冲区,因为默认情况下写入stdout是异步的。 '$ stdout.sync = true'切换到同步stdout输出,该输出禁用stdout缓冲区并确保在继续执行之前刷新每个写入。 – mscdex