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.

N'avez-vous pas besoin -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