javascript - nodejs : child_process. spawn 不报告退出代码

标签 javascript node.js exit child-process

在为一个简单工具编写单元测试时,我无法获取以 require('child_process').spawn 启动的子进程的进程退出代码。为了简化 if down,请考虑这个以代码 35 退出的简单 Node 命令:

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

现在考虑以下文件,上面的命令是使用 execspawn 执行的。目标是捕获退出代码:

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 退出。

关于javascript - nodejs : child_process. spawn 不报告退出代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36960185/

相关文章:

node.js - 插入多条记录和/或更新特定字段并仅返回插入的新记录(MongoDB)

node.js - process.env vs app.get ('env' )获取 express.js 环境

python - 如何在被 Python 杀死之前运行最后一个函数?

javascript - 如何获取 DOM 中附近节点上的 <div> ?

javascript - 在 ajax 成功函数中显示隐藏的 div 以显示剩余的注册表单

mysql - "Can' t 将值插入我的数据库 's table from UI"

c - (C) 等待输入时跳动光标

c++ - 是否可以成功包装退出方法?

javascript - 将加密 hmac 转换为 crypto-js hmac 字符串

javascript - Javascript 的相对 URL