除了tcl,几乎没有什么损失
我有一个expect脚本,它远程登录到路由器,发出命令并记录输出。以下代码段应该是理想的输出除了tcl,几乎没有什么损失,tcl,telnet,expect,Tcl,Telnet,Expect,我有一个expect脚本,它远程登录到路由器,发出命令并记录输出。以下代码段应该是理想的输出 ========================================================================== slot type number number rev. addresses ---- ------------------ ---------- ----------
==========================================================================
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
如果{[info exists router_name]}{
生成telnet$router\u名称
睡眠3
}否则{
返回“产卵器*{
exp\u发送“术语长度0\n”
让“发布秀”难上加难
expect-re.“*>.*.*.”{
exp\u发送“硬显示\n”
}
#睡眠10
#放置“发布换行符”
expect-re“.*>.*.*.{exp\u send”退出\n\n\n}
}-re.“*login.*name.*”{
如果{[info exists\u username]}{
exp\u发送“$router\u username\n”
}
exp\u继续
}-re.“*word*”{
如果{[info exists\u pass]}{
exp\u发送“$router\u pass\n”
}
exp\u继续
}
expect-re“.*”{}
关闭
exp_send“show hardware\n”行是给定的命令-我需要该命令的输出。正如@DonalFellows所建议的那样-解决方法完成了任务 添加一个段以检测“-More--”并发送“\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
如果{[info exists router_name]}{
生成telnet$router\u名称
睡眠3
}否则{
返回“产卵器*{
exp\u发送“术语长度0\n”
让“发布秀”难上加难
expect-re.“*>.*.*.”{
exp\u发送“硬显示\n”
}
#睡眠10
expect-re.“*>.*..”{
exp\u发送“退出\n\n\n\n”
}-re.“*--更多--.*”{
exp\u发送“\n\n”
}
}-re.“*login.*name.*”{
如果{[info exists\u username]}{
exp\u发送“$router\u username\n”
}
exp\u继续
}-re.“*word*”{
如果{[info exists\u pass]}{
exp\u发送“$router\u pass\n”
}
exp\u继续
}
expect-re“.*”{}
关闭
有趣;输出到损坏点的长度约为1500字节。我能想到的唯一与这类事情相关的是某种以太网数据包帧大小,或者可能是MTU。这有什么关系?TCP应该将我们与这类事情隔离开来……您最好通过sett解决这一问题比如说,15,让你的expect脚本知道如何处理分页。这将是一个难看的解决办法,但至少是可能的……在任何人问起之前,我对expect的详细信息的了解是不可靠的,我对Cisco路由器固件的了解完全不存在。我可以用谷歌搜索,但你也可以这样做。(或者其他人可以通过正确的回答告诉你怎么做。)@DonalFellows:谢谢,我会试试你在第二条评论中说的那个。@DonalFellows:确实有效。非常感谢。