如何将exec转换为spawn?

编程入门 行业动态 更新时间:2024-10-08 10:51:35

如何将exec<a href=https://www.elefans.com/category/jswz/34/1771419.html style=转换为spawn?"/>

如何将exec转换为spawn?

我正在将exec与以下代码一起使用NPM执行脚本,并且运行良好。

const { exec, spawn } = require('promisify-child-process')

await exec(`npm run start ${key}  ${scriptVariables[key]}`)

然后我开始出现此错误:

RangeError [ERR_CHILD_PROCESS_STDIO_MAXBUFFER]:超出标准缓冲区最大缓冲区长度

所以我认为缓冲区是一个问题,并将其更改为:

await exec(`npm run start ${key}-Product  ${UrlsArray[i]}`, {maxBuffer: 4096 * 4096})

更好,但偶尔仍会出现一些错误。因此,从我阅读的内容来看,我需要更改为spawn,并且不要缓冲。

但是这个不起作用:

await spawn(`npm run start ${key}-Product ${UrlsArray[i]}`)

任何想法如何转换为代码?

回答如下:

对于spawn,您需要以数组形式提供参数:

await spawn(
  'npm',
  ['run', 'start', `${key}-Product`, UrlsArray[i]],
  {maxBuffer: 4096 * 4096}
);

但是,如果与maxBuffer长度有关,这将无法解决您的错误,您仍然需要增加限制。如果您的用例允许的话,您也可以使用流媒体代替阅读整个输出都在前面。您也可以尝试从中删除一些输出npm脚本。

这是来自Node.js文档的使用流式传输的示例:

const { spawn } = require('child_process');
const ls = spawn('ls', ['-lh', '/usr']);

ls.stdout.on('data', (data) => {
  console.log(`stdout: ${data}`);
});

ls.stderr.on('data', (data) => {
  console.error(`stderr: ${data}`);
});

ls.on('close', (code) => {
  console.log(`child process exited with code ${code}`);
});

更多推荐

如何将exec转换为spawn?

本文发布于:2024-05-07 20:59:19,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1757228.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:转换为   如何将   exec   spawn

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!