2016-04-30 43 views
1

雖然書面方式的單元測試的一個簡單的工具,我無法得到一個子進程的進程退出代碼開始require('child_process').spawn。爲了簡化,如果向下,考慮其與代碼35退出這個簡單的節點的命令:的NodeJS:child_process.spawn沒有報告退出代碼

 
SHELL> node -e "process.exit(35)" & 
[1] 23427 
[1]+ Saída 35    node -e "process.exit(35)" 

現在考慮下面的文件中,其中上述命令與exec並用spawn執行。目標是捕捉退出代碼:

 
SHELL> cat WTF.js 
var cp = require('child_process'); 

cp.exec('node -e "process.exit(35);"', function(err){ 
    console.log('child exit code (exec)', err.code); 
}); 

cp.spawn('node', ['-e', '"process.exit(35);"']).on('exit', function(code){ 
    console.log('child exit code (spawn)', code); 
}); 

但它運行時...驚喜:

 
SHELL> node WTF.js 
child exit code (exec) 35 
child exit code (spawn) 0 

我失去了在spawn調用了一些東西明顯?

 
SHELL> node --version 
v6.0.0 

回答

5

spawn()第二個參數中刪除雙引號,則spawn()將自動完成,確保該參數不小心分離,由於空間等:

cp.spawn('node', ['-e', 'process.exit(35);']) 
    .on('exit', function(code){ 
    console.log('child exit code (spawn)', code); 
    }); 

否則節點對待傳遞(JS)碼字面上"process.exit(35);"(字符串文字),其是基本上無操作,所以它與代碼退出0

+0

真棒!按預期工作。 – laconbass