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

相關文章
相關標籤/搜索