我正在尝试捕获子进程的输出并通过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。
我在这里缺少什么?
答案 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,到目前为止,事情对我来说已经很好了。