【问题标题】:How to ignore errors generated by child_process.exec?如何忽略 child_process.exec 生成的错误?
【发布时间】:2017-04-25 15:36:08
【问题描述】:

我正在从我的 nodejs 脚本执行 shell 脚本命令。其中一个命令是“npm install”,然后是运行 nodejs 文件的索引文件的命令。

npm install 命令返回由 node-gyp 生成的错误。一般来说,这个错误不会影响我的服务。但是, child_process.exec 正在捕获它并停止脚本。我的问题是,如何触发 exec 命令并忽略返回的错误?

下面是sn-p的一小部分代码

const exec = require('child_process').exec;
exec("npm install", {
            cwd: serviceDirectory + gitRepo
        },
        (error1, stdout, stderr) => {
            if(error1){
                //this error is for testing purposes
                util.log(error1);
            }
            //run the service
            exec("node index.js",{
                cwd: serviceDirectory + gitRepo + "/"
            }, cb);

        });

}

【问题讨论】:

  • 我必须承认我没有anwser。您是否尝试使用 detached 选项和没有 stdio(忽略)而不是 exe 来生成进程?
  • 也没用

标签: javascript node.js bash shell


【解决方案1】:

你可以使用try-catch来处理带有catch的错误,例如:

const { promisify } = require('util');
const exec = promisify(require('child_process').exec);

export default async function () {
  const dataFormat = {
    stdout: '',
    stderr: '',
  };
  let cpu = dataFormat;
  let diskUsed = dataFormat;

  try {
    cpu = await exec('top -bn1 | grep "Cpu(s)" | sed "s/.*, *\\([0-9.]*\\)%* id.*/\\1/"');
  } catch (error) {
    cpu.stderr = error.stderr;
  }
  try {
    diskUsed = await exec("df -h | awk 'NR==2{printf $3}'");
  } catch (error) {
    diskUsed.stderr = error.stderr;
  }

  const payload = {
    cpu,
    diskUsed,
  };
 return payload
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-24
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 2015-12-06
    • 1970-01-01
    • 2019-07-11
    • 2021-04-18
    相关资源
    最近更新 更多