Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何忽略child_process.exec生成的错误?_Javascript_Node.js_Bash_Shell - Fatal编程技术网

Javascript 如何忽略child_process.exec生成的错误?

Javascript 如何忽略child_process.exec生成的错误?,javascript,node.js,bash,shell,Javascript,Node.js,Bash,Shell,我正在从nodejs脚本执行shell脚本命令。其中一个命令是“npm install”,后面是运行nodejs文件索引文件的命令 npm install命令返回由节点gyp生成的错误。通常,此错误不会影响我的服务。但是,child_process.exec正在捕获它并停止脚本。我的问题是,如何触发exec命令并忽略返回的错误 下面是代码片段的一小部分 const exec = require('child_process').exec; exec("npm install", {

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

npm install命令返回由节点gyp生成的错误。通常,此错误不会影响我的服务。但是,child_process.exec正在捕获它并停止脚本。我的问题是,如何触发exec命令并忽略返回的错误

下面是代码片段的一小部分

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);

        });

}

您可以使用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
}

我必须承认,我没有安瑟尔。您是否尝试使用分离选项生成进程,并且没有stdio(忽略)而不是exe?也不起作用