J'écris un petit programme d'automatisation pour se connecter via ssh à un serveur distant, activer un script PERL et interagir avec le script (qui génère des menus pour l'utilisateur à choisir) . J'ai une liste de réponses prédéfinie par l'utilisateur, et j'ai parcouru le script PERL et noté les invites du menu afin de l'utiliser dans "pexpect". maintenant, je:pexpect parfois atteint, échoue parfois et quitte à l'expiration
global MYTIMEOUT
print "starting building"
child.sendline('/root/myscripts/perl/_build_.pl')
child.expect('username',timeout=MYTIMEOUT)
child.sendline(value_dict['myname'])
child.expect('reason',timeout=MYTIMEOUT)
child.sendline(value_dict['myreason'])
child.expect(value_dict["branch"],timeout=MYTIMEOUT)
child.sendline(branch_number)
child.expect('enter revision',timeout=MYTIMEOUT)
child.sendline('\n')
child.expect('choose customers',timeout=MYTIMEOUT)
child.sendline(value_dict['customers'])
child.expect('choose number',timeout=MYTIMEOUT)
child.sendline(value_dict['component_list'])
Ainsi, l'attendent avec le username,reason,branch and revision
tous fonctionnent très bien, et quand j'ouvre le fichier journal de l'enfant, je peux le voir clairement qu'ils répondent à leurs bonnes lignes. après cela, il y a du code en cours d'exécution par le script PERL, environ 5-6 secondes, dans lequel il renvoie à l'information shell pour la personne qui l'exécute, après quoi, j'obtiens 'choose customers' and 'choose number'
le sendline ignore ce que j'ai écrit, et pour les clients envoie une valeur [retour], et quand il arrive à s'attendre à choisir un nombre, il n'envoie rien, et finit par expirer. Un moyen de forcer le sendline à m'obéir? ou assurez-vous que les captures s'attendent à ce qu'elles soient attrapées?
EDIT: ajout d'informations
Votre tâche deviendrait probablement plus simple si vous modifiez simplement le programme distant pour accepter ces options depuis la ligne de commande! – salva
le programme à distance n'est pas le mien à changer, il est de département différent et ne devrait pas être changé. de toute façon, le problème était le jeton envoyé, vous pouvez voir ma réponse vers le bas. Merci quand même :) –