2016-06-15 11 views
0

Ich versuche, die Ausgabe eines lang laufenden SSH-Befehl kontinuierlich zu lesen. Ich verstehe, dass exec_command nicht blockiert ist. Aber sobald ich stdout.readlines() verwende, wird es blockiert. Ich möchte nicht 10 Minuten warten, bis mein ssh-Befehl alle Zeilen gelesen hat. Ich möchte die Ausgabe erhalten, sobald der Befehl ssh in stdout schreibt. Gibt es einen Weg, es zu tun?Wie liest man die Ausgabe von lang laufenden SSH-Befehl kontinuierlich ohne Blockierung mit Paramiko

import paramiko 
#import select 
ssh=paramiko.SSHClient() 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh.connect(hostname,username=username,password=password) 
#transport = ssh.get_transport() 
#channel = transport.open_session() 
stdin,stdout,stderr = ssh.exec_command(command) 
print stdout.readlines() 

Antwort

0
import paramiko 
ssh=paramiko.SSHClient() 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh.connect(hostname,username=username,password=password) 
stdin,stdout,stderr = ssh.exec_command(command) 
for line in iter(lambda: stdout.readline(2048), ""): 
    print(line) 

Der obige Code geholfen. Ich habe diesen Antwortvorschlag von get output from a paramiko ssh exec_command continuously

Verwandte Themen