Node.js child_process exec 傳回值被截斷問題
問題描述實踐中遇到一個問題,當利用child_process exec調用系統命令的時候,如果命令返回的內容比較大,那麼得到的stdout會被截斷,下面是相關代碼:
- exec("some command", function(error, stdout, stderr){
- //利用傳回值 stdout 進行相關計算
- }
解決辦法調研後發現,exec 執行的時候會使用一個緩衝區,預設大小是200 × 1024。所以解決方案就是增加這個緩衝區大小到合適的值:
- exec('dir /b /O-D ^2014*', {
- maxBuffer: 2000 * 1024 //quick fix
- }, function(error, stdout, stderr) {
- list_of_filenames = stdout.split('\r\n'); //adapt to your line ending char
- console.log("Found %s files in the replay folder", list_of_filenames.length)
- }
- )
詳細資料可以參考官方文檔
其他另外還有人提供了一種解決的方法,不過沒有進行驗證,僅供參考:
- var exec = require('child_process').exec;
- function my_exec(command, callback) {
- var proc = exec(command);
- var list = [];
- proc.stdout.setEncoding('utf8');
- proc.stdout.on('data', function (chunk) {
- list.push(chunk);
- });
- proc.stdout.on('end', function () {
- callback(list.join());
- });
- }
- my_exec('dir /s', function (stdout) {
- console.log(stdout);
- })