nodejs:child_process.spawn不报告退出代码
在写一个简单工具的unit testing时,我无法获得以require('child_process').spawn
的subprocess的进程退出代码。 为了简化如果下来,考虑这个简单的节点命令退出代码35:
SHELL> node -e“process.exit(35)”& [1] 23427 [1] +赛义达35节点-e“process.exit(35)”
现在考虑下面的文件,上面的命令用exec
和spawn
执行。 目标是捕捉退出代码:
shell>猫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('孩子退出代码(spawn)',代码); });
但是当它运行…惊喜:
SHELL>节点WTF.js 子代码退出(exec)35 子代码退出(spawn)0
我在产卵召唤中错过了一些明显的东西吗?
SHELL> node --version V6.0.0
从spawn()
的第二个参数中删除双引号, spawn()
会自动注意确保参数不会由于空格等而意外分离:
cp.spawn('node', ['-e', 'process.exit(35);']) .on('exit', function(code){ console.log('child exit code (spawn)', code); });
否则,节点将传入的(js)代码字面上看作"process.exit(35);"
(一个string文字),它基本上是一个空操作,所以它退出代码0。