Ausführen eines interaktiven Befehls in Python
Ich habe ein Skript, das ich in Python (2.6.5) ausführen möchte und das der folgenden Logik folgt:
Benutzer zur Passworteingabe auffordern. Sieht aus wie ("Passwort eingeben:") (* Hinweis: Die Eingabe wird nicht auf dem Bildschirm wiedergegeben.)Geben Sie irrelevante Informationen ausBenutzer zur Antwort auffordern ("Blah Blah filename.txt blah blah (J / N) ?:")Die letzte Eingabeaufforderungszeile enthält Text, den ich analysieren muss (filename.txt). Die angegebene Antwort spielt keine Rolle. (Das Programm könnte hier tatsächlich beendet werden, ohne eine anzugeben, solange ich die Zeile analysieren kann.)
Meine Anforderungen sindetwas ähnlich zuUmschließen einer interaktiven Befehlszeilenanwendung in ein Python-Skript, aber die Antworten dort scheinen ein bisschen verwirrend, und meine hängen immer noch, auch wenn der OP erwähnt, dass es für ihn nicht ist.
Durch das Umsehen bin ich zu dem Schluss gekommen, dasssubprocess
ist der beste Weg, dies zu tun, aber ich habe ein paar Probleme. Hier ist meine Popen-Linie:
p = subprocess.Popen("cmd", shell=True, stdout=subprocess.PIPE,
stderr=subprocess.STDOUT, stdin=subprocess.PIPE)
Wenn ich a anruferead()
oderreadline()
aufstdout
Die Eingabeaufforderung ist Drucker auf dem Bildschirm und es hängt.
Wenn ich a anrufewrite("password\n")
zumstdin
wird die Eingabeaufforderung auf den Bildschirm geschrieben und bleibt hängen. Der Text inwrite()
wird nicht geschrieben (ich bewege den Cursor nicht um eine neue Zeile).
Wenn ich anrufep.communicate("password\n")
, gleiches Verhalten wie write ()
Ich habe hier nach ein paar Ideen gesucht, wie ich am besten etwas einbringen kannstdin
und möglicherweise, wie man die letzte Zeile in der Ausgabe parst, wenn man sich großzügig fühlt, obwohl ich das wahrscheinlich irgendwann herausfinden könnte.