Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2403616
  • 博文数量: 328
  • 博客积分: 4302
  • 博客等级: 上校
  • 技术积分: 5486
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-01 11:14
个人简介

悲剧,绝对的悲剧,悲剧中的悲剧。

文章分类

全部博文(328)

文章存档

2017年(6)

2016年(18)

2015年(28)

2014年(73)

2013年(62)

2012年(58)

2011年(55)

2010年(28)

分类: JavaScript

2014-07-15 16:13:39

问题描述

实践中遇到一个问题,当利用child_process exec调用系统命令的时候,如果命令返回的内容比较大,那么得到的stdout会被截断,下面是相关代码:

  1. exec("some command", function(error, stdout, stderr){
  2.     //利用返回值 stdout 进行相关计算
  3. }

解决办法

调研后发现,exec 执行的时候会使用一个缓冲区,默认大小是200 × 1024。所以解决方案就是增加这个缓冲区大小到合适的值:

  1. exec('dir /b /O-D ^2014*', {
  2.     maxBuffer: 2000 * 1024 //quick fix
  3.     }, function(error, stdout, stderr) {
  4.         list_of_filenames = stdout.split('\r\n'); //adapt to your line ending char
  5.         console.log("Found %s files in the replay folder", list_of_filenames.length)
  6.     }
  7. )
详细信息可以参考

其他

另外还有人提供了一种解决的方法,不过没有进行验证,仅供参考:

  1. var exec = require('child_process').exec;

  2. function my_exec(command, callback) {
  3.     var proc = exec(command);

  4.     var list = [];
  5.     proc.stdout.setEncoding('utf8');

  6.     proc.stdout.on('data', function (chunk) {
  7.         list.push(chunk);
  8.     });

  9.     proc.stdout.on('end', function () {
  10.         callback(list.join());
  11.     });
  12. }

  13. my_exec('dir /s', function (stdout) {
  14.     console.log(stdout);
  15. })


阅读(6709) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~