在使用 child_process 模块中的 exec 、execFile、spawnSync、execFileSync、execSync 方法时需要注意其 options 参数中的 maxBuffer 项。
以上方法在执行时会在内存中建一个 buffer 来缓冲组合所有的输出数据,而 maxBuffer 则是指定该 buffer 大小的地方。如果输出超过指定的大小则会报 maxBuffer exceeded 的错误。
解决方案是执行的时候估计好大小,设置更大的 maxBuffer:
var exec = require('child_process').exec;
var child = exec('ls -lah', {
encoding: 'utf8',
timeout: 0,
maxBuffer: 5000 * 1024, // 默认 200 * 1024
killSignal: 'SIGTERM'
}, function(err, stdout, stderr) {
console.log(stdout);
});
或者是用 spawn 的 .on(‘data’) 事件触发时,手动拼接数据到 .on(‘close’) 事件触发的时候获得完整数据。