Holen Sie sich die Ausgabe von einem paramiko ssh exec_command kontinuierlich
Ich bin einen zeitintensiver python-Skript über ssh auf einer entfernten Maschine mit paramiko. Wie ein Zauber funktioniert, bisher keine Probleme.
Leider stdout (bzw. der stderr) werden nur angezeigt, nachdem das Skript beendet wurde! Aufgrund der Ausführung Zeit, ich würde viel lieber Ausgabe jede neue Zeile ein, wie er gedruckt ist, nicht danach.
remote = paramiko.SSHClient()
remote.set_missing_host_key_policy(paramiko.AutoAddPolicy())
remote.connect("host", username="uname", password="pwd")
# myScript produces continuous output, that I want to capture as it appears
stdin, stdout, stderr = remote.exec_command("python myScript.py")
stdin.close()
for line in stdout.read().splitlines():
print(line)
Wie kann das erreicht werden? Hinweis: natürlich könnte man leiten Sie die Ausgabe in eine Datei und "weniger" diese Datei über einen anderen ssh-session, aber das ist sehr hässlich und ich brauche einen Reiniger, ideal pythonic Lösung 🙂
- nur um anderen zu helfen, in der Zukunft, myScript.py enthalten sollte, sys.stdout.flush()
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als angegeben in die Lesen([size]) - Dokumentation, wenn Sie nicht angeben, eine
size
es liest, bis EOF, das macht das Skript warten, bis der Befehl beendet wurde, bevor der Rückkehr vonread()
- und Druck-keine Ausgabe.Überprüfen Sie dieses Antworten: Wie eine Schleife bis EOF in Python? und Wie zu tun ist ", Während nicht EOF" für Beispiele, wie man Abgase die Datei-wie-Objekt.
for line in iter(lambda: stdout.readline(2048), ""): print(line, end="")
... hat den trick!Ich Stand vor einem ähnlichen Problem. Ich war in der Lage, es zu lösen, indem hinzufügen get_pty=True paramiko:
Ein minimales und vollständiges Beispiel arbeiten wie zu verwenden diese Antwort (getestet in Python 3.6.1)
und
Ausführung auf dem lokalen Rechner mit