簡體   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