Node.js childprocess.stdout.on(';数据';回调)未触发

Node.js childprocess.stdout.on(';数据';回调)未触发,node.js,stdio,spawn,Node.js,Stdio,Spawn,我试图捕获子进程的输出并通过websocket发送,但捕获上的(数据,回调)事件时遇到问题 var subscriberProc = spawn('./stdoutsub', ['mytopic', '--clientid', 'node-dispatcher'], {cwd: '/Users/oskar/projects/others/rsmb_1/mac/'}); subscriberProc.st

我试图捕获子进程的输出并通过websocket发送,但捕获上的
(数据,回调)
事件时遇到问题

var subscriberProc = spawn('./stdoutsub', 
                      ['mytopic', '--clientid', 'node-dispatcher'], 
                      {cwd: '/Users/oskar/projects/others/rsmb_1/mac/'});

subscriberProc.stdout.on('data', function(data) {
  console.log('-> "' + data + '"');
  wsServer.send(data);
});
如果更改为以下内容,则stdoutsb进程将使用预期数据打印到节点进程stdout

var subscriberProc = spawn('./stdoutsub', 
                      ['mytopic', '--clientid', 'node-dispatcher'], 
                      {cwd: '/Users/oskar/projects/others/rsmb_1/mac/', 
                       stdio: 'inherit'});
我正在OSX上运行节点版本0.8.1


我在这里遗漏了什么?

我遇到了类似的问题(在某些情况下,我遗漏了输出),并得出结论,在我有机会开始监听之前,派生的进程正在输出

我使用Node.js文档中类似于以下的代码解决了这个问题:

var fs = require('fs'),
    spawn = require('child_process').spawn,
    out = fs.openSync('./out.log', 'a'),
    err = fs.openSync('./out.log', 'a');

var child = spawn('prg', [], {
    detached: true,
    stdio: [ 'ignore', out, err ]
});
然后我读了.log,到目前为止,一切都很顺利