node.js在spawn调用上循环

时间:2011-07-15 01:56:03

标签: node.js

我正在尝试启动一个长期运行的程序,它为sdtout提供了大量输出。我试图使用下面的方法来读取间隔数据。

s    = spawn('blah_long_running_expect.pl --device server');
setInterval( function (){   
  s.stdout.on('data', function (data) {
     console.log("herehere");})
},1000);

}

这是http服务器实例的一部分......在此之前的某处有一个createserver。我最终的想法是使用response.write输出到屏幕

我现在收到以下错误。我想知道这种读取线的设置方式是否完全错误?

(node) warning: possible EventEmitter memory leak detected. 11 listeners added. 
Use emitter.setMaxListeners() to increase limit.
Trace: 
    at Socket.<anonymous> (events.js:126:17)
    at Timer.callback (/tmp/requestHandlers.js:12:17)

2 个答案:

答案 0 :(得分:2)

s.stdout.on('data',function(data){      的console.log( “herehere”);}) },1000);

.on调用会添加一个事件侦听器。你想要做的就是这样。

s = spawn('blah_long_running_expect.pl --device server');
var dd = "";
s.stdout.on('data', function(d) {
  console.log('some data : ' + d);
  dd += d;
});
s.stdout.on('end', function() {
  console.log('end');
});
setInterval( function (){   
  console.log(dd);
  dd = "";
},1000);

答案 1 :(得分:0)

使用您的代码,它每秒都会添加一个新的事件侦听器。您无需担心将输出拆分为块; Node.js会处理这个问题,而这正是“数据”事件的用途。