Ich schreibe ein kleines Automatisierungsprogramm, um Verbindung durch SSH zu einem Remote-Server, aktivieren Sie ein PERL-Skript und interagieren mit dem Skript (die Menüs für den Benutzer zur Auswahl generieren) . Ich habe eine vordefinierte Liste von Antworten von Benutzern, und ich habe das PERL-Skript durchgegangen und die Eingabeaufforderungen für Menüs notiert, um es in "pexpect" zu verwenden. jetzt, ich habe:Pexpect manchmal getroffen, manchmal fehlschlägt und bei Timeout
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'])
Also das erwarten mit dem username,reason,branch and revision
alle gut funktionieren, und wenn ich die Log-Datei des Kindes öffnen, kann ich es deutlich sehen, dass sie auf ihre korrekten Linien reagieren. danach wird vom PERL-Skript etwas Code ausgeführt, etwa 5-6 Sekunden, in dem er an die Shell-Informationen für die ausführende Person ausgibt, nach denen ich die 'choose customers' and 'choose number'
sendline ignoriere, was ich geschrieben habe, und für Kunden sendet einen [return] -Wert, und wenn es zu erwarten, wählen Sie Nummer, es sendet nichts, und schließlich Timeout.
Irgendeine Möglichkeit, die Sendeline zu zwingen, mir zu gehorchen? oder stellen Sie sicher, dass der expect Catch wie es das Muster fangen sollte?
EDIT: hinzugefügt Informationen
Ihre Aufgabe würde wahrscheinlich einfacher werden, wenn Sie nur das Remote-Programm ändern, um diese Optionen über die Befehlszeile zu akzeptieren! – salva
das Remote-Programm ist nicht meins zu ändern, es ist aus einer anderen Abteilung und sollte nicht geändert werden. Wie auch immer, das Problem war das Token gesendet, Sie können meine Antwort sehen. trotzdem danke :) –