1. 利用子行程spawn呼叫系統命令
const child_process = require('child_process');
let cmd = 'rm';
let args = ('-rf ./demo').split(' ');
let task = child_process.spawn(cmd, args, {
cwd: cwd
});
task.stdout.on('data', (data) => {
console.log(`${data}`);
})
task.stderr.on('data', (data) => {
console.log(`${data}`);
})
child_process.spawn回傳stdout和stderr流物件, 程式可以通過stdout的data、end或者其他事件來獲取子行程回傳的資料, 使用spawn方法時,子行程一開始執行就會通過流回傳資料,因此spawn適合子行程回傳大量資料的情形,
與exec相比,spawn還可以對子行程進行更詳細的設定, 例如使子行程在后臺運行,成為一個daemon程式,不隨著父行程的退出而退出,
2.利用子行程exec呼叫系統命令
var exec = require('child_process').exec;
exec('ls -al', function(error, stdout, stderr){
if(error) {
console.error('error: ' + error);
return;
}
console.log('stdout: ' + stdout);
console.log('stderr: ' + typeof stderr);
child_process.exec回傳整個子行程處理時產生的buffer,這個buffer默認大小是200K, 當子行程回傳的資料超過默認大小時,程式就會產生”Error: maxBuffer exceeded”例外, 調大exec的maxBuffer選項可以解決這個問題,不過當子行程回傳的資料太過巨大的時候,這個問題還會出現, 因此當子行程回傳的資料超過默認大小時,最好的解決方法是使用spawn方法,
總結
從實作原理來說,spawn是更底層的介面,exec對spawn進行了再次封裝,提供了更簡單的API介面,
- exec比spawn易于使用,當子行程回傳的資料不超過200K時,exec比spawn更適合,
- 當子行程需要回傳大量資料時,spawn更安全,
- spawn提供了更多的選項,可以對子行程進行更詳細的設定,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/250179.html
標籤:其他
