SSHClient ist eine einfache Wrapper-Klasse, die sich mit den Funktionen auf niedrigerer Ebene in Paramiko befasst. In der API-Dokumentation wird eine recv_exit_status () -Methode für die Channel-Klasse aufgeführt.
Ein sehr einfaches Demonstrationsskript:
$ cat sshtest.py
import paramiko
import getpass
pw = getpass.getpass()
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.WarningPolicy())
client.connect('127.0.0.1', password=pw)
while True:
cmd = raw_input("Command to run: ")
if cmd == "":
break
chan = client.get_transport().open_session()
print "running '%s'" % cmd
chan.exec_command(cmd)
print "exit status: %s" % chan.recv_exit_status()
client.close()
$ python sshtest.py
Password:
Command to run: true
running 'true'
exit status: 0
Command to run: false
running 'false'
exit status: 1
Command to run:
$
Ein viel einfacheres Beispiel, bei dem die Kanalklasse "unterer Ebene" nicht direkt aufgerufen wird (dh - der
client.get_transport().open_session()
Befehl NICHT verwendet wird ):quelle
Vielen Dank für JanC, ich habe einige Änderungen für das Beispiel hinzugefügt und in Python3 getestet, es ist wirklich nützlich für mich.
quelle
In meinem Fall war die Ausgabepufferung das Problem. Aufgrund der Pufferung werden die Ausgaben der Anwendung nicht blockierend ausgegeben. Die Antwort zum Drucken von Ausgaben ohne Pufferung finden Sie hier: Deaktivieren Sie die Ausgabepufferung . Kurz gesagt, führen Sie Python einfach mit der folgenden Option -u aus:
> python -u script.py
quelle