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

我正在尝试编写一个代理我项目中其他脚本的小命令脚本,我正在尝试使用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个字节,然后将其余的存储到下一个“data”事件.然后它打印出下一个8192等.这意味着输出有一个延迟,有时当我们运行服务器进程时,它会停止打印出来,直到你在服务器上触发触发另一个“数据”事件的东西.

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

最佳答案 您正在使用异步异步的节点进程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); });
};
点赞