Question

Je suis en cours d'exécution d'une application, ce qui demande un mot de passe de l'utilisateur une douzaine de fois :-( J'ai essayé d'utiliser attendent de contourner ce problème, et le faire fonctionner en mode automatique, mais je suis incapable d'obtenir sur la question des multiples fois le mot de passe, ce qui est pas exactement statique. Parfois, il demande 4-5 fois et parfois autour de 9-10 fois.

Y at-il une meilleure solution au problème que ce que j'ai donné ci-dessous:

spawn myApp [lindex $argv 0]
expect " password: $"
send "$password\r"
expect {
  " password: $"    send "$password\r"
  "^Rollout Done "
  "^Rollout Updated "
}

Avec la solution ci-dessus, je n'ai pu attraper le mot de passe deux fois, puis commencer à entrer manuellement pour le reste du temps, il est possible une boucle avec le mot de passe?

Était-ce utile?

La solution

Recherchez le commande exp_continue - il empêche la commande [expect] courant de retour, il peut trouver les invites de mot de passe suivants.

spawn myApp [lindex $argv 0]
expect {
    -re { password: $} {
        send "$password\r"
        exp_continue
    }
    -re {^Rollout (?:Done|Updated) }
}

Si vous voulez que l'utilisateur d'entrer le mot de passe, plutôt que de le stocker dans le texte brut dans le script, voir Comment puis-je faire une invite de script expect un mot de passe?

Autres conseils

Expect peut utiliser des boucles - il est juste TCL avec quelques commandes ajoutées je crois. Il suffit donc de faire

set found 0
while {$found < 1}
{
expect {
 " password: $"    send "$password\r"
 "^Rollout Done "  set found 1
 "^Rollout Updated " set found 1
}
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top