我正在尝试捕获子进程的输出并通过 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);
});
如果我更改为以下内容,标准输出子进程将打印到节点进程标准输出与预期数据。
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到目前为止,事情对我来说一切顺利。