Node模块--child_process

1.说明

child_process 模块是 Node.js 的原始模块:javascript

  1. 主要做用:执行命令行命令
  2. 该模块的功能主要由 child_process.spawn() 函数提供

2.区分exec和spawn

2-1 exec执行命令

const {
  exec
} = require('child_process');
exec('ls -la /usr', (error, stdout, stderr) => {
  console.log(error);
  console.log(stdout);
  console.log(stderr);
});
  • 第一个参数是将要执行的命令,命令之间的参数使用空格分开
  • 第二个参数是回调函数,有三个参数
回调中的第一个参数:命令执行错误会有值,不然为null
回调中的第二个参数:子进程的正常输出内容
回调中的第三个参数:子进程执行错误的输出

2-2 spawn命令

const {
  spawn
} = require('child_process');

const ls = spawn('ls', ['-la', '/usr']);

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

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

ls.on('close', (code) => {
  console.log(`子进程退出码:${code}`);
});
  • 第一个参数是命令
  • 第二个参数是一个数组,数组中的每个元素是执行命令须要的参数

须要特别注意的是,须要获取执行的内容须要经过流的形式来进行输出java

2-3 二者对比

相同点:数组

  • 均可以用来执行命令行命令

不一样点:函数

  • exec 用来执行命令,命令和命令后跟的参数是写在一个字符串中,做为函数的第一个参数
  • spawn 用来执行命令,命令和命令后跟的参数是分开写的
  • exec 的输出内容是在回调中输出的,一次性分配 200K 大小的内存空间,若是超出这个大小会报错
  • spawn 的输出内容是经过流的形式进行输出的,没有分配空间,不会报错

总结:spawn 比 exec 使用范围要广,所以,能使用 spawn 的尽可能使用 spawn。ui

相关文章
相关标签/搜索