问题如下:
1.使用stream.on('data',(data)=>{do sth})
这种风格时,data的值是每一行命令行的值,并不断刷新触发回调函数,我需要拿到不止一行的值才可以判断逻辑,怎么样才能拿到不止一行的值呢?比如键入一次stream.write('dis cur\r')
(一条查询目标设备所有端口信息的指令,输出上百行信息)后,stream.on('data',(data)=>{do sth})
是把这上百行信息中的每一行都传到data并触发回调函数。
2.上一个问题的进阶,我需要写一连串的逻辑,根据命令行返回值的不同进行下一步键入命令。
比如:stream.write('ssh 172.xx.xx.xx@xxx -p 22')
(在跳板服务器上连接目标设备)
之后有2种情况:
情况一:初次登陆,会提示含有'authentication'单词的数行信息,此时我需要stream.write('yesr')才能继续。
情况二:非初次登陆,会提示含有'password'单词的数行信息,此时我需要stream.write('mypasswordr')才能继续。
这样的判断会有很多,根据键入命令后的data来进行判断。然后获取data的风格,在node.js的stream说明文档上并没有很详细的例子,请问我需要怎么写才能实现这种顺序逻辑判断呢?
附上目前的代码:
stream.on('data',function(data) {
if (data.toString().search('authenticity') > 0) {
stream.write('yes\r');
} else {
if (data.toString().search('Password') !== -1) {
stream.write('mypassword\r');
} else {
if (data.toString().search('login time') !== -1) {
stream.write('screen-length 0 temporary\r')
stream.write('dis cur int Eth-Trunk2.7006 \r')//查询端口信息
} else {
if (data.toString().search('shutdown') !== -1) {
console.log('Bras下联口问题')
} else{
if(data.toString().search('shutdown') !== -1){
}
}
}
}
}
console.log(''+data);
}).write('ssh -c 3des-cbc xx@xx.xx.xxxx.xxxx -p 22\r');
现在的代码是对每一行的data都进行判断,但是这样会不断触发回调函数,所以接下来键入命令的逻辑感觉不应该写在这里,如果写在下面的话,我也不知道怎样才能解决问题1或者2的问题。
请问下这边我发送sar命令,不同系统返回不同,有的是一次多行,有的系统返回一行不到,是什么原因导致的