问题描述
实践中遇到一个问题,当利用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);
-
})
阅读(6823) | 评论(0) | 转发(0) |