Tôi không biết whats xảy ra nhưng tôi không nhận được đầu ra hoàn chỉnh từ lệnh từ xa thực hiện có thể vì mong đợi bộ đệm bên trong là nhận được execceded.Làm thế nào để có được đầu ra hoàn chỉnh từ mong đợi khi kích thước bộ đệm trong của kích thước expect_out (buffer) vượt quá?
proc SendCommands { Commands } {
global prompt log errlog
foreach element [split $Commands ";"] {
expect {
-re $prompt
{send -- "$element\r"}
}
set outcome "$expect_out(buffer)"
foreach line [split $outcome \n] {
foreach word [regexp -all -inline {\S+} $line] {
if {([string index [string trimleft $line " "] 0 ] == "%")} {
puts "$outcome"
exit 1
}
}
}
puts "$outcome"
}
}
set timeout 30
foreach host [ split $hosts "\;" ] {
spawn ssh -o "StrictHostKeyChecking no" "[email protected]$host"
match_max 10000000
expect {
timeout { send_user "\nFailed to get password prompt\n"; exit 1 }
eof { send_user "\nSSH failure for $host\n"; exit 1 }
"*?assword:*"
{
send -- "$password\r"
}
}
expect {
timeout { send_user "\nLogin incorrect\n"; exit 1 }
eof { send_user "\nSSH failure for $host\n"; exit 1 }
-re "$prompt"
{ send -- "\r" }
}
set timeout 300
SendCommands "$Commands"
}
đây là cách tôi đang thực hiện điều đó:
./sendcommand aehj SWEs-elmPCI-B-01.tellus comnet1 "terminal length 0;show int description" "(.*#)$"
tôi đang nhận được đầu ra hoàn toàn chỉ khi tôi loại bỏ log user 0
nhưng khi tôi sử dụng puts lệnh trong sendcommands fucnction trên tôi nhận được khoảng 90 phần trăm của nó với 10 phần trăm của dữ liệu cuối ở cuối không được hiển thị.
một cách tôi đang nghĩ là sử dụng phủ định của regex trong mong đợi nhưng có vẻ như nó không hoạt động.
expect {
-re ! $prompt
{puts $expect_outcome(buffer)}
}
EDIT: Tôi nhận được tất cả sản lượng một lần khi thực thi của nó khoảng 5 hay 7 lần