nodejs:child_process.spawn 未报告退出代码
nodejs: child_process.spawn not reporting exit code
在为一个简单工具编写单元测试时,我无法获取以 require('child_process').spawn
启动的子进程的进程退出代码。为了简化 if down,请考虑这个以代码 35 退出的简单节点命令:
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
从 spawn()
的第二个参数中删除双引号,spawn()
将自动确保参数不会因空格等而意外分隔:
cp.spawn('node', ['-e', 'process.exit(35);'])
.on('exit', function(code){
console.log('child exit code (spawn)', code);
});
否则 node 将传递的 (js) 代码按字面意思视为 "process.exit(35);"
(字符串文字),这基本上是一个空操作,因此它以代码 0.
退出
在为一个简单工具编写单元测试时,我无法获取以 require('child_process').spawn
启动的子进程的进程退出代码。为了简化 if down,请考虑这个以代码 35 退出的简单节点命令:
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
从 spawn()
的第二个参数中删除双引号,spawn()
将自动确保参数不会因空格等而意外分隔:
cp.spawn('node', ['-e', 'process.exit(35);'])
.on('exit', function(code){
console.log('child exit code (spawn)', code);
});
否则 node 将传递的 (js) 代码按字面意思视为 "process.exit(35);"
(字符串文字),这基本上是一个空操作,因此它以代码 0.