childprocess.stdout.on('data',callback)没有触发

时间:2012-06-29 21:47:02

标签: node.js stdio spawn

我正在尝试捕获子进程的输出并通过websocket发送,但我在捕获on.(data, callback)事件时遇到问题。

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);
});

如果我更改为以下内容,stdoutsub进程将使用预期数据打印到节点进程stdout。

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

我在OSX上运行节点版本0.8.1。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题(在某些情况下我错过了输出)并得出结论,在我有机会开始收听它之前,产生的进程正在喷出输出。

我通过使用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,到目前为止,事情对我来说已经很好了。