3

我正在尝试捕获子进程的输出并通过 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。

我在这里缺少什么吗?

4

1 回答 1

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

然后我读了 out.log,到目前为止,一切对我来说都很好。

于 2013-02-08T08:29:25.677 回答