comment nettoyer de la précédente expect_buf dans un script expect
J'ai écrit une fonction d'attente pour obtenir la sortie d'une commande et mon code est comme ci-dessous
proc do_cmd {cmd id} {
set spawn_id $id
send "$cmd\r"
expect "$cmd\r"
expect {
-re "\n(.*)\r\n" {return $expect_out(1,string)}
default {exit 1}
}
}
Si j'appelle la fonction, juste une fois, il serait fonctionne très bien et en retour quelque chose que je veux, mais si je l'appelle en continu, sans pause, il serait de retour quelque chose d'indésirable.
# test case 1
set ret [do_cmd $mycmd $spawn_id]
puts "$mycmd returns $ret" # the return value is ok
# test case 2
set ret [do_cmd $mycmd $spawn_id]
set ret [do_cmd $mycmd $spawn_id]
puts "$mycmd returns $ret" # the return value is not something I want
J'utilise le "exp_internal 1' pour le déboguer et a constaté que la expect_out dans la seconde appelée commande détient toujours la sortie précédente info et causé la correspondance de problème, alors comment puis-je nettoyer le expect_out tampon(j'ai essayé de définir une chaîne vide, mais il ne fonctionne pas) ou est-il autre chose que je peux faire pour éviter ce problème? Merci à l'avance.
-re "\n(.*)\r\n"
pour correspondre expression régulière ? parce que vous êtes à l'aide de expect_out(1,string)
Oups, ma faute, je vous remercie de me rappeler que
OriginalL'auteur user1726366 | 2014-08-27
Vous devez vous connecter pour publier un commentaire.
Ne Libes suggestion pour votre scénario est comme suit,
Référence : Explorer Attendre
Dans ce cas, après votre match, mieux essayer de sauver le match pour certaines variables, puis il suffit d'ajouter le code
expect *
à la dernière. Cela permettra de vider la mémoire tampon. Votre code peut modifié comme ci-dessous.En dehors de cela, il existe un autre moyen peut être la suppression de la
expect_out(buffer)
contenu lui-même qui va supprimer le "tampon" de l'indice deexpect_out
tableau qui peut être représenté à l'Quand le prochain match arrive,
expect_out
tableau sera mis à jour l'index "tampon" et on peut avoir les fraisexpect_out(buffer)
valeur. Remplacer leexpect *
avec le code ci-dessus si vous préférez utiliser de cette façon.C'est tout à fait une solution de contournement, ce genre de choses pour obtenir ce que nous voulons réellement. Vous pouvez aller de l'avant avec toute approche. Le choix est le vôtre. 🙂
J'ai déterminé de façon empirique que la suppression de la expect_out(tampon) est beaucoup plus cohérent que "s'attendre à *". Ce message a été d'une grande aide pour moi. Stackoverflow est indispensable, comme toujours.
OriginalL'auteur Dinesh