【问题标题】:Store nodejs exec stdout in var将nodejs exec stdout存储在var中
【发布时间】:2012-02-17 07:35:02
【问题描述】:

我想让这个函数在 var 中返回 exec 命令的结果。我该怎么做呢?

// System Serial Number
function systemSerialNumber(response) {
  console.log("Request handler 'systemSerialNumber' was called.");
  exec("dmidecode -t 1 | grep 'Serial Number:' | cut -d: -f2 | sed -e 's/^[ \t]*//g'", function (error, stdout, stderr) {
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write(stdout);
    response.end();
  });
}

【问题讨论】:

  • 源代码的格式很差,所以从技术上讲,您将第一个函数(我假设是您正在谈论的函数)注释掉了。但是,您要求的是将此异步调用转换为同步调用,这在像 Node.js 这样的cooperatively scheduled 事件系统上是个坏主意。我认为您需要重新考虑您的预期 API。

标签: linux node.js


【解决方案1】:

来自http://nodejs.org/docs/v0.3.1/api/all.html#child_process.exec 描述了如何异步获取命令的输出。但是听起来您想同步获取结果以便可以返回它们,在这种情况下,您可能对这个 SO 问题更感兴趣:node.js execute system command synchronously

【讨论】:

    【解决方案2】:

    我建议使用 Step https://github.com/creationix/step 之类的库

    function systemSerialNumber(response) {
      var output = "";
      Step(
        function runCommand() {
          exec("dmidecode -t 1 | grep 'Serial Number:' | cut -d: -f2 | sed -e 's/^[ \t]*//g'", this);
        },
        function(error, stdout, stderr) {
          output = stdout;
          response.writeHead(200, {"Content-Type": "text/plain"}); response.write(stdout); response.end();
      });
    return output;
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-07
      • 2020-03-30
      • 2013-10-11
      • 2017-02-07
      • 2014-08-31
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多