package require Expect
set params [open params.txt r]
array set params_arr [list ]
while {![eof $params]} {
set line [gets $params]
if [regexp {\[(.*)\](.*)} $line full name value] { set params_arr([string trim $name]) [string trim $value] }
}
close $params
proc q3526e {arr} {
upvar $arr params
set buffer [list ]
if [catch {spawn telnet $params(hostname)} result] { puts $result; exit 1 }
expect -re {Password} { exp_send "$params(password)\r" } eof { exit 1 }
expect -re $params(prompt) { exp_send "sup\r" }
expect -re {Password} { exp_send "$params(password)\r" } eof { exit 1 }
expect -re $params(prompt) { exp_send "dis log\r" }
expect -re {More ----} {
foreach ele [split $expect_out(buffer) "\n"] { lappend buffer $ele }
exp_send "\r"
while { [regexp {More ----} $expect_out(buffer)] } {
expect -re {More ----} {
foreach ele [split $expect_out(buffer) "\n"] { lappend buffer $ele }
exp_send "\r"
} -re "$params(prompt)" {
foreach ele [split $expect_out(buffer) "\n"] { lappend buffer $ele }
writelog buffer
exp_send "\r"
} eof { exit 1 }
}
} -re $params(prompt) {
foreach ele [split $expect_out(buffer) "\n"] { lappend buffer $ele }
writelog buffer
exp_send "\r"
} eof { exit 1 }
}
proc writelog {buf} {
upvar $buf buffer
set curr [clock format [clock seconds] -format %D]
regexp {([0-9]{2})/([0-9]{2})/([0-9]{2})} $curr match month day year
set curr "20$year$month$day"
set log [open [format "%s_%s%s" {c:/3526log} $curr {.txt}] w]
foreach ele $buffer { puts $log $ele }
flush $log
close $log
}
if [catch {eval [string trim $params_arr(act)]} result] {puts $result; exit}
参数文件:
[hostname]网关ip地址
[password]交换机密码
[prompt]<Q3526E>
[act]q3526e params_arr