我正在尝试在node.js中同步执行child_process(是的,我知道这很糟糕,我有充分的理由)并检索stdout上的任何输出,但我无法弄清楚如何...
我找到了这个SO帖子:node.js execute system command synchronously,它描述了如何使用库(node-ffi)来执行命令,这很有效,但我唯一能得到的就是进程退出码。命令执行的任何数据都直接发送到stdout - 我该如何捕获它?
> run('whoami')
username
0
换句话说,username
与stdout回应,run
的结果为0
。
我 很多 而不是弄清楚如何阅读stdout
答案 0 :(得分:2)
所以我有一个解决方案,但不完全喜欢它...只是发布在这里供参考:
我正在使用其他SO帖子中引用的node-ffi
库。我有一个功能:
>> run-sync-output
run-sync-output
并存储结果有一个明显的问题,如果用户没有对当前目录的写访问权限,它将失败。而且,这只是浪费精力。 : - /
答案 1 :(得分:1)
我已经构建了一个node.js模块来解决这个问题。看看:)
<强>更新强>
上述模块解决了您的原始问题,因为它允许子进程的同步链接。链中的每个链接都从链中的前一个进程获取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();
});