1. ホーム
  2. javascript

[解決済み] ノードchild_processを使用した標準出力バッファの問題

2022-11-04 16:59:34

質問

ローカルネットワーク上の共有フォルダからJSONファイル(約220Ko)を取得するために、node child_processを使用してcurlを実行しようとしています。しかし、それは実際に私が通過することができないバッファの問題を返します。 以下は私のコードです。

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 に出力できる最大のデータ量を指定します - この値を超えた場合、子プロセスは強制終了します。

また、ドキュメントでは、デフォルト値の maxBuffer は 200KB であると書かれています。

例として、以下のコードでは、最大バッファサイズを500KBに増やしています。

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

さらに、あなたは http.get を読んで、あなたがやろうとしていることを実現できるかどうかを確認することもできます。