node.js – 同步执行命令并得到结果

我试图在node.js中同步执行一个child_process(是的,我知道这是不好的,我有一个很好的理由),并检索标准输出上的任何输出,但我不明白如何…

我发现这个SO后: node.js同步执行系统命令 ,描述如何使用库(node-ffi)来执行命令,这很好,但我唯一能得到的是进程退出代码。 该命令执行的任何数据都直接发送到标准输出 – 我如何捕获这个?

> run('whoami') username 0 

换句话说, username是echo'd到标准输出, run的结果是0

我宁愿弄清楚如何读取标准输出

所以我有一个解决scheme的工作,但不完全喜欢它…只是张贴在这里作为参考:

我正在使用其他SOpost中引用的node-ffi库。 我有一个function:

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

如果用户没有对当前目录的写访问权限,则会出现一个明显的问题。 另外,这只是浪费精力。 : – /

我已经构build了一个node.js模块来解决这个确切的问题。 一探究竟 :)

EXEC计划

更新

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

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

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

ExecXI是用C ++编写的一个节点扩展,用于逐个执行shell命令,将命令的输出实时输出到控制台。 目前有可select的链接和解开的方式; 这意味着您可以select在命令失败(链接)后停止脚本,也可以继续操作,就好像什么都没发生过一样!

使用说明在自述文件中 。 随意提出请求或提交问题!

然而,它还没有返回标准输出呢…嗯,我今天刚刚发布。 也许我们可以build立它。

无论如何,我认为这是值得一提的。 我也发布了一个类似的问题: node.js同步执行系统命令

除了编写代码有点不同之外,实际上没有任何理由去做任何同步。

你不喜欢这个吗? ( docs )

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