对于我的一个项目,我基本上希望能够将一个命令传递给一个Node.js脚本并让它执行它并逐行记录输出。这就是我现在所拥有的:Node.js子进程产生缓冲问题?
var child_process = require('child_process');
var child_spawn = child_process.spawn('ruby', ['test.rb']);
child_spawn.stdout.on('data', function(data) {
console.log('stdout: ' + data);
});
现在,当我尾-f系统记录该工程,我会除外,但是当我用一个简单的Ruby脚本我写测试它一次为临危所有输出如果它被缓冲?
脚本中的问题是:
puts "hello"
sleep(1)
puts "there"
sleep(1)
puts "my"
sleep(1)
puts "name"
sleep(1)
puts "is"
sleep(1)
puts "james"
当我在它自己的运行这个它的作品,因为我敢肯定,你可以想像,在与之间的第二间隙的时间打印出一条线。
在节点文档(http://nodejs.org/api/child_process.html)我看到这一点:
(请注意,某些程序使用行缓冲I/O内部不影响Node.js的,但它意味着你要发送的数据孩子的过程不会立即消耗。)
这是发生在这里,有没有办法解决它?
啊有趣的是,这确实在技术上解决它。问题出在我的情况下,我并不总是能够控制脚本/命令,所以我不能做那样的调整。我实际上已经设法使用类似https://gist.github.com/jamesrwhite/3369fa6c04a6e14fb3a8的方式让它在Ruby中工作,并且test.rb脚本将按预期工作,不会在每次打印后进行刷新。 –