您的位置:首页 > 运维架构 > Shell

nodejs ssh2 shell函数发送命令不成功的问题

2016-11-07 11:06 405 查看
在使用nodejs ssh2的shell函数时,我们用conn.write和conn.end发送命令,经常会遇到命令发送不过去的情况,我自己也遇到这种情况,纠结了很久,最后把write,end发送命令的代码,放在接收到第一个data事件之后去发送,就不会出现这种发不过去的情况了。后来咨询了一下写nodejs ssh2代码的作者,才知道当建立stream连接后,数据的缓冲区可能没有准备好,如果此时对缓冲区里面写入数据,那么写入的数据将会被忽略,这也就是为什么有时候发送数据不成功的原因。当接收到第一个data事件后,此时数据缓冲区已经准备好了,那么此时我们可以向缓冲区write或者end数据了。

conn.shell(function(err, stream){
if(err){
dosomething();
}else{
var buf = '';
var bData = false;
stream.on('data', function(data){
if(bData == false) {
bData = true;
stream.write(cmd);
stream.end();
}
buf = buf + data;
console.log('stdout: ' + data);
}).on('close', function(){
dosomething();
}).stderr.on('data', function(data) {
console.log('stderr: ' + data);
});
}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: