我有一个expect脚本,它告诉路由器并给出一个命令并记录输出。下面的片段应该是理想的输出。
==========================================================================
slot type number number rev. addresses
---- ------------------ ---------- ---------- -------- ---------
0/0 GE-4 IOA 4306297694 4500006802 A04 4
0/1 --- --- --- --- ---
1/0 GE-4 IOA 4306255468 4500006802 A04 4
1/1 --- --- --- --- ---
2/0 GE-8 IOA 4306211660 4500009102 A05 8
2/1 --- --- --- --- ---
3/0 --- --- --- --- ---
3/1 --- --- --- --- ---
4/0 --- --- --- --- ---
4/1 --- --- --- --- ---
5/0 OC3/STM1-8 ATM IOA 4305503226 4500006903 A02
5/1 --- --- --- --- ---
7/0 SRP IOA 4306297292 4501006502 A00 2
11/0 Service IOA 4306516819 4501007103 A00
11/1 --- --- --- --- ---
12/0 --- --- --- --- ---
12/1 --- --- --- --- ---
13/0 GE-4 IOA 4306255468 4500006802 A04 4
13/1 --- --- --- --- ---
14/1 --- --- --- --- ---
15/0 --- --- --- --- ---
15/1 --- --- --- --- ---
==========================================================================
但我得到的是..。13/0行已损坏,13/1完全丢失,这是相当一致的-只有这些行被损坏。我把match_max设为60000。我甚至在发出命令后加上了“睡眠10”。
==========================================================================
slot type number number rev. addresses
---- ------------------ ---------- ---------- -------- ---------
0/0 GE-4 IOA 4306297694 4500006802 A04 4
0/1 --- --- --- --- ---
1/0 GE-4 IOA 4306255468 4500006802 A04 4
1/1 --- --- --- --- ---
2/0 GE-8 IOA 4306211660 4500009102 A05 8
2/1 --- --- --- --- ---
3/0 --- --- --- --- ---
3/1 --- --- --- --- ---
4/0 --- --- --- --- ---
4/1 --- --- --- --- ---
5/0 OC3/STM1-8 ATM IOA 4305503226 4500006903 A02
5/1 --- --- --- --- ---
7/0 SRP IOA 4306297292 4501006502 A00 2
11/0 Service IOA 4306516819 4501007103 A00
11/1 --- --- --- --- ---
12/0 --- --- --- --- ---
12/1 --- --- --- --- ---
13/0 G ---
14/1 --- --- --- --- ---
15/0 --- --- --- --- ---
15/1 --- --- --- --- ---
==========================================================================
不知道为什么会发生这种事。
这是代码
if {[info exists router_name]} {
spawn telnet $router_name
sleep 3
} else {
return "Spawner<< No router_name\n"
}
##newly added
expect -re ".*>|.*#" {
exp_send "term len 0\n"
puts "issuing show hard"
expect -re ".*>|.*#" {
exp_send "show hard\n"
}
#sleep 10
#puts "issuing newlines"
expect -re ".*>|.*#" { exp_send "exit\n\n\n\n" }
} -re ".*login.*|.*name.*" {
if {[info exists router_username]} {
exp_send "$router_username\n"
}
exp_continue
} -re ".*word*" {
if {[info exists router_pass]} {
exp_send "$router_pass\n"
}
exp_continue
}
expect -re ".*" {}
close
行exp_send“显示硬件\n”;是给定的命令-我需要该命令的输出。
发布于 2014-07-07 07:20:59
正如@DonalFellow所建议的那样--解决问题的方法完成了这项工作。
添加一个段来检测“--更多--”并发送"\n\n“输出,而不会中断。
以下是更改后的代码
if {[info exists router_name]} {
spawn telnet $router_name
sleep 3
} else {
return "Spawner<< No router_name\n"
}
expect -re ".*>|.*#" {
exp_send "term len 0\n"
puts "issuing show hard"
expect -re ".*>|.*#" {
exp_send "show hard\n"
}
#sleep 10
expect -re ".*>|.*#" {
exp_send "exit\n\n\n\n"
} -re ".*--More--.*" {
exp_send "\n\n"
}
} -re ".*login.*|.*name.*" {
if {[info exists router_username]} {
exp_send "$router_username\n"
}
exp_continue
} -re ".*word*" {
if {[info exists router_pass]} {
exp_send "$router_pass\n"
}
exp_continue
}
expect -re ".*" {}
close
https://stackoverflow.com/questions/24580063
复制相似问题