Node.js 等待ssh exec完成
我正试图用Node.js 等待ssh exec完成,node.js,wait,Node.js,Wait,我正试图用ssh-exec包从远程主机获取信息。 这就是我的功能: getHostStats(hostnames) { var currhost; var result; for (var i = 0; i < Object.keys(hostnames).length; i++) { currhost = hostnames[i]; console.log("Current host: " + currhost);
ssh-exec
包从远程主机获取信息。
这就是我的功能:
getHostStats(hostnames) {
var currhost;
var result;
for (var i = 0; i < Object.keys(hostnames).length; i++) {
currhost = hostnames[i];
console.log("Current host: " + currhost);
exec('/root/usage.sh', {
user: 'root',
host: currhost,
},
function (err, stdout) {
if (err) { console.error(err); }
result = stdout.split('\n');
console.log("Hostname: " + currhost + ", Result 1: " + result[0] + ", Result 2: " + result[1]);
}
);
console.log(result);
this.setHostInfo(currhost, result);
}
不幸的是,不要等待exec(…)
函数完成,因此变量result
为空,并返回undefined
所以我读了一些关于wait
和async
的文章,但我不知道如何让我的应用程序先等待exec(…)
函数完成,然后记录结果
我知道这是可能的,但我的开发技能不是最好的,我真的不知道如何才能实现这一点
其他问题:ssh exec是否会在命令完成后自动关闭连接?这是使用async/await的一种方法
函数executeshCommand(主机){
返回新承诺((解决、拒绝)=>{
exec('/root/usage.sh'{
用户:'根',
主持人:主持人,,
},(错误,标准)=>{
如果(错误){
退货拒绝(err)
}
结果=stdout.split('\n');
解决(结果)
})
})
}
异步函数getHostStats(主机名){
for(主机名的常量主机){
const results=await executeshcommand(主机)
console.log('Results for',host)
console.log(结果)
//其他自定义代码
}
}
嘿,使用此代码,我收到以下错误:SyntaxError:await仅在异步函数中有效
,是否需要将executeSshcommand
声明为异步函数?编辑:对不起,我的错误,忘记了使getHostStats
async。我会尝试一下,然后告诉你不需要wait
也可以等待承诺。您需要将对getHostStats
的调用包含在函数中。将更新答案看一看:“因为主作用域不是异步的,所以您需要执行一个异步匿名函数来调用您的函数及其本身:”是的,忘记了async
关键字
console.log(result);
this.setHostInfo(currhost, result);