繁体   English   中英

如何从 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 函数中,我想将成功设置为 true,但它永远不会发生。 任何人都可以帮助我并向我解释为什么这是行不通的。

child_process.exec()是一个异步函数。 所以进程开始运行后台,函数立即返回。 因此,您要在流程完成和设置之前检查success的值。

您的处理程序也需要是异步的,因为它依赖于异步函数的返回值。 就像是:

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为真就抛出错误。 许多程序即使成功也写入标准错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM