使用节点child_process的标准输出缓冲区问题

我正在尝试使用节点child_process执行curl从本地网络中的共享文件夹中获取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)

回答:

使用时,您需要使用并设置maxBuffer选项child_process.exec。从文档中:

maxBuffer 指定在stdout或stderr上允许的最大数据量-如果超出此值,则终止子进程。

该文档还指出默认值为maxBuffer200KB。

例如,以下代码将最大缓冲区大小增加到500KB:

var execute = function(command, callback){

exec(command, {maxBuffer: 1024 * 500}, function(error, stdout, stderr){ callback(error, stdout); });

};

此外,您可能想阅读一下http.get,看看它是否能够实现您要尝试执行的操作。

以上是 使用节点child_process的标准输出缓冲区问题 的全部内容, 来源链接: utcz.com/qa/421809.html

回到顶部