NodeJS exec / spawn stdout截断了8192个字符的流

问题描述 投票:0回答:2

我在MacOS,Node v12上,并使用子进程(exec / spawn / execSync / spawnSync)执行可返回8192个以上字符的shell命令。但是,回到调用子进程的nodeJS方法中,我最多只能得到8192个字符,仅此而已。 (8192 seems to be the default pool size for a buffer)。

我已经尝试将Options中的maxBuffer大小增加到大于8192的任何值,但这不会影响任何内容。

我也尝试过用exec,spawn,execSyncspawnSync运行相同的命令,它们的行为都相同。结果相同。

我跑步时:

 exec(shellCommand, { encoding: "buffer", maxBuffer: 16384 }, (error, stdout, stderr) => {
     console.log('stdout--> length: ', stdout.length, '<--->', stdout)
 });

我得到:

stdout--> length: 8192 <---> <Buffer 7b 22 72 65 73 75 6c 74 22 3a 5b 7b 22 70 72 6f 6a 65 63 74 4e 61 6d 65 22 3a 22 73 65 65 64 73 22 2c 22 74 65 6d 70 6c 61 74 65 4e 61 6d 65 22 3a 22 ... 8142 more bytes>

我知道返回的数据大于8192,因为当我在shell中运行shell命令并检查其长度是否大于8192时。

而且,这是令人费解的,当我将子进程的<< stdio >>选项设置为'inherit'时,例如:execSync(shellCommand, { encoding: "buffer", stdio:"inherit" });

((在我的情况下,这表示使用parents stdout,这是NodeJS的控制台)

我在运行NodeJS的控制台中看到了完整的响应。

我也读过关于github的类似问题,但并没有真正帮助。

如何在NodeJS中执行shell命令并获得完整的响应?

我在MacOS,Node v12上,并使用子进程(exec / spawn / execSync / spawnSync)执行可返回8192个以上字符的shell命令。但是,回到调用...

node.js macos shell stdout child-process
2个回答
0
投票
child_process.exec的默认缓冲区大小为1MB,因此请尝试不传递maxBuffer;但是,最好使用child_process.spawn以便将输出作为流获得。

0
投票
尝试一下:
© www.soinside.com 2019 - 2024. All rights reserved.