我在Docker中运行Nexpect,我需要获取另一个docker容器的IP,所以我ssh进入主机并使用Nexpect运行一个方法来获取IP地址,但我不知道为什么方法返回null,这里是方法的代码:
exports.getIP = function(username){
var nexpect = require('nexpect');
var ip;
nexpect.spawn("ssh core@172.17.8.101 docker inspect --format '{{ .NetworkSettings.IPAddress }}' " + username)
.expect(" ")
.run(function (err, stdout, exitcode) {
if (err || !err) {
console.log("stdout = " + stdout);
}
ip = stdout;
});
console.log("ip = " + ip);
return ip;
};
答案 0 :(得分:0)
由于它是异步的,当你在nexpect方法中没有分配它时,你会立即返回值。您需要添加一个回调来告诉它何时返回结果。
exports.getIP = function(username, callback){
var nexpect = require('nexpect');
nexpect.spawn("ssh core@172.17.8.101 docker inspect --format '{{ .NetworkSettings.IPAddress }}' " + username)
.expect(" ")
.run(function (err, stdout, exitcode) {
if (err) {
callback(err);
}
ip = stdout;
callback(null, ip);
});
};
然后你可以做
require('module')
.getIP('username', function(err, ip){
if(err) throw err;
console.log(ip);
});
您也可以使用promises。
var Promise = require('promise');
exports.getIP = function(username) {
var nexpect = require('nexpect');
return new Promise(function(resolve, reject) {
nexpect.spawn("ssh core@172.17.8.101 docker inspect --format '{{ .NetworkSettings.IPAddress }}' " + username)
.expect(" ")
.run(function(err, stdout, exitcode) {
if (err) {
reject(err);
} else {
ip = stdout;
resolve(ip);
}
});
})
};
和
require('module')
.getIP('username')
.then(function(ip) {
console.log(ip);
}, function(err) {
throw err;
})