Ошибка буфера Stdout с помощью node child_process
Я пытаюсь выполнить curl, используя node child_process, чтобы получить JSON файл (около 220Ko) из общей папки в локальной сети. Но он фактически возвращает проблему с буфером, которую я не могу получить.
Вот мой код:
var exec = require('child_process').exec;
var execute = function(command, callback){
exec(command, function(error, stdout, stderr){ callback(error, stdout); });
};
execute("curl http://" + ip + "/file.json", function(err, json, outerr) {
if(err) throw err;
console.log(json);
})
И вот ошибка, которую я получаю:
if(err) throw err;
^
Error: stdout maxBuffer exceeded.
at Socket.<anonymous> (child_process.js:678:13)
at Socket.EventEmitter.emit (events.js:95:17)
at Socket.<anonymous> (_stream_readable.js:746:14)
at Socket.EventEmitter.emit (events.js:92:17)
at emitReadable_ (_stream_readable.js:408:10)
at emitReadable (_stream_readable.js:404:5)
at readableAddChunk (_stream_readable.js:165:9)
at Socket.Readable.push (_stream_readable.js:127:10)
at Pipe.onread (net.js:526:21)
Ответы
Ответ 1
Вам необходимо использовать и установить параметр maxBuffer
при использовании child_process.exec
. Из документации:
maxBuffer
указывает наибольший объем данных, разрешенных для stdout или stderr - если это значение превышено, тогда дочерний процесс будет убит.
В документации также указано, что значение по умолчанию maxBuffer
равно 200 КБ.
В качестве примера максимальный размер буфера увеличивается до 500 Кбайт в следующем коде:
var execute = function(command, callback){
exec(command, {maxBuffer: 1024 * 500}, function(error, stdout, stderr){ callback(error, stdout); });
};
Кроме того, вы можете прочитать о http.get
, чтобы узнать, способна ли она выполнить то, что вы пытаетесь сделать.
Ответ 2
У меня была аналогичная проблема, и я исправил ее переход от exec к spawn:
var child = process.spawn('<process>', [<arg1>, <arg2>]);
child.stdout.on('data', function (data) {
console.log('stdout: ' + data);
});
child.stderr.on('data', function (data) {
console.log('stderr: ' + data);
});
child.on('close', function (code) {
console.log('child process exited with code ' + code);
});