增加nodejs管道的最大字节大小

时间:2016-01-06 02:09:02

标签: javascript node.js maven stream

我正在尝试编写一个代理我项目中其他脚本的小命令脚本,并且我尝试使用node将stdout从生成的进程传递到当前进程的stdout :

function runCommand(command, arguments) {
    var commandProcess = childProcess.spawn(command, arguments);
    commandProcess.stdout.pipe(process.stdout);
    commandProcess.on("exit", process.exit);
}

这很好用,直到我从子进程开始获取大量输出(例如,其中一个是maven命令)。我所看到的是它只打印出stdout的前8192个字节,然后将其余的存储到下一个"数据"事件。然后它打印出下一个8192等。这意味着输出有一个延迟,有时当我们运行服务器进程时有时它会停止打印出来,直到你在服务器上触发了触发另一个& #34;数据"事件。

有没有办法增加此缓冲区的大小或避免此行为?理想情况下,这个命令器脚本只是代理我们的其他脚本,应该完全按原样打印出来。

1 个答案:

答案 0 :(得分:1)

您正在使用异步异步的节点进程spawn,因此它将在子进程提供stdout时提供输出。 参考:[https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options][1]

我建议使用子进程exec来运行你可以控制输出缓冲区大小的进程,这将在子进程完成后给出输出。这就是你传递缓冲区大小的方法

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