如何从 child_process.exec() 设置变量

How to set variable from child_process.exec()

我有一个简单的功能运行 来自网络的系统应用程序。

server.route({
  method: 'POST',
  path: '/executeMain',
  handler: (req, res) => {
    var success = false;
    exec("./main", (error, stdout, stderr) => {
      if (error) {
        console.log('error: ' + error.message);
        return;
      }
      if (stderr) {
        console.log('error: ' + stderr);
        return;
      }
      console.log(stdout);
      success = true;
    });

    if (success) {
      return res.response("OK").code(200);
    }
    else {
      return res.response("ERR").code(500);
    }
  }
});

在 exec 函数中,我想将 success 设置为 true,但它从来没有发生过。任何人都可以帮助我并向我解释为什么这是行不通的。

child_process.exec() 是一个异步函数。因此进程立即启动 运行 后台和函数 returns。因此,您要在进程完成之前和设置之前检查 success 的值。

您的处理程序也需要是异步的,因为它依赖于异步函数的 return 值。类似于:

server.route({
  method: 'POST',
  path: '/executeMain',
  handler: (req, res) => {
    return new Promise( (resolve, reject) => {
        exec("./main", (error, stdout, stderr) => {
            if (error) {
                console.log('eror: ' + error.message);
                reject( res.response("ERR").code(500) )
            }
            if (stderr) {
                console.log('error: ' + stderr);
                reject( res.response("ERR").code(500) )
            }

            console.log(stdout);
            resolve( res.response("OK").code(200) )
        });
    });
}

另一方面,您可能不想仅仅因为 stderr 为真就抛出错误。许多程序即使在成功时也会写入 stderr。