node.js - 同步执行命令并获得结果

时间:2011-08-24 22:56:39

标签: node.js command synchronous

我正在尝试在node.js中同步执行child_process(是的,我知道这很糟糕,我有充分的理由)并检索stdout上的任何输出,但我无法弄清楚如何...

我找到了这个SO帖子:node.js execute system command synchronously,它描述了如何使用库(node-ffi)来执行命令,这很有效,但我唯一能得到的就是进程退出码。命令执行的任何数据都直接发送到stdout - 我该如何捕获它?

> run('whoami')
username
0

换句话说,username与stdout回应,run的结果为0

很多 而不是弄清楚如何阅读stdout

5 个答案:

答案 0 :(得分:2)

所以我有一个解决方案,但不完全喜欢它...只是发布在这里供参考:

我正在使用其他SO帖子中引用的node-ffi库。我有一个功能:

  • 接受给定的命令
  • 附加>> run-sync-output
  • 执行它
  • 同步读取run-sync-output并存储结果
  • 删除此tmp文件
  • 返回结果

有一个明显的问题,如果用户没有对当前目录的写访问权限,它将失败。而且,这只是浪费精力。 : - /

答案 1 :(得分:1)

我已经构建了一个node.js模块来解决这个问题。看看:)

exec-plan

<强>更新

上述模块解决了您的原始问题,因为它允许子进程的同步链接。链中的每个链接都从链中的前一个进程获取stdout。

答案 2 :(得分:1)

我遇到了类似的问题,最后我为此编写了一个节点扩展。你可以看看git存储库。它是开源的,免费的,还有所有好东西!

https://github.com/aponxi/npm-execxi

  

ExecXI是用C ++编写的节点扩展,用于执行shell命令   逐个输出命令的输出到控制台   即时的。存在可选的链式和无链接方式;含义   您可以选择在命令失败后停止脚本   (链式),或者你可以继续,好像什么也没发生过!

使用说明位于ReadMe file。随意提出拉动请求或提交问题!

然而它还没有返回标准输出......好吧,我今天刚刚发布它。也许我们可以建立它。

无论如何,我认为值得一提。我还将此问题发布到类似的问题:node.js execute system command synchronously

答案 3 :(得分:0)

从Node版本v0.11.12开始,为此提供了一个child_process.execSync函数。

答案 4 :(得分:-2)

除了编写稍微不同的代码之外,实际上没有理由做任何同步的事情。

你不喜欢这个? (docs

var exec = require('child_process').exec;

exec('whoami', function (error, username) {
    console.log('stdout: %s', username);
    continueWithYourCode();
});