Node.js同步shell exec

时间:2016-07-08 19:28:40

标签: node.js shell asynchronous

我遇到了在node.js中执行异步shell的问题。

在我的例子中,node.js安装在raspberry pi上的Linux操作系统上。我想用一个在pi上调用的shell脚本解析的值来填充一个数组。这很好,但exec()函数是异步调用的。

我需要将函数设置为绝对同步,以免弄乱我的整个系统。有没有办法实现这个目标?目前我正在尝试一个名为.exe的lib,但代码似乎仍然表现为异步。

这是我的代码:

function execute(cmd, cb)
{
  child = exec(cmd, function(error, stdout, stderr)
  {
    cb(stdout, stderr);
  });
}



function chooseGroup()
{
  var groups = [];

  execute("bash /home/pi/scripts/group_show.sh", function(stdout, stderr)
  {
    groups_str  = stdout;
    groups      = groups_str.split("\n");
  });

  return groups;
}


//Test
console.log(chooseGroup());

1 个答案:

答案 0 :(得分:0)

如果您使用的是child_process.exec,则它已经异步。

您的chooseGroup()函数无法正常工作,因为它是异步的。 groups变量将始终为空。

如果你改变它,你的chooseGroup()功能可以工作:

function chooseGroup() {    
  execute("bash /home/pi/scripts/group_show.sh", function(stdout, stderr) {
    var groups = stdout.split("\n");
    // put the code here that uses groups
    console.log(groups);
  });
}

// you cannot use groups here because the result is obtained asynchronously
// and thus is not yet available here.

如果出于某种原因,您正在寻找.exec()的同步版本,那么child_process.execSync()虽然在基于服务器的代码中很少推荐,但因为它是阻塞的,因此阻止在node.js运行时执行其他事情。