2016-08-04 18 views
0

Ich habe eine Maschine, die ich telnet, und passiere "Strg + C", bis ich die Eingabeaufforderung sehe. Die Strg + C funktioniert möglicherweise nicht immer, also muss ich alle 5 Sekunden versuchen, bis ich meine erwartete Ausgabe ($ prompt) sehe.Wie implementieren "Fallback-Bedingung" in While-Schleife in Expect?

Falls ich keine $ Eingabeaufforderung bekomme, wie kann ich sicherstellen, dass ich die While-Schleife erneut versuchen kann? Liegt dieser Code unter der Best Practice? Meine Sorge ist, dass ich nicht weiß, was ich bekomme, wenn die "Strg + C" fehlschlägt, es könnte alles sein und es muss ignoriert werden, es sei denn es ist $ prompt.

while { $disableFlag == 0 } { 
    send "^C\r" 
    expect { 
       "*$prompt*" { 
        puts "Found the prompt" 
        sleep 5 
       } 
       "*" { 
        set disableFlag 1 
        puts "Retrying" 
        sleep 5 
       } 
    } 
} 

Antwort

0

Sie wollen wahrscheinlich so etwas wie dieses (nicht getestet)

set timeout 5 
send \03 
expect { 
    "*$prompt*" { 
     puts "found the prompt" 
    } 
    timeout { 
     puts "did not see prompt within $timeout seconds. Retrying" 
     send \03 
     exp_continue 
    } 
} 

# do something after seeing the prompt 

\03 der Oktalwert für ctrl-C: http://wiki.tcl.tk/3038

sehen Wenn Sie schließlich retten wollen:

set timeout 5 
set count 0 
send \03 
expect { 
    "*$prompt*" { 
     puts "found the prompt" 
    } 
    timeout { 
     if {[incr count] == 10} { # die 
      error "did not see prompt after [expr {$timeout * $count}] seconds. Aborting" 
     } 
     puts "did not see prompt within $timeout seconds. Retrying" 
     send \03 
     exp_continue 
    } 
}