2017-09-05 2 views
1

Ich benutze Python3 SSH, jetzt kann ich Remote-Gerät anmelden und führen Sie meine Remote-C-Programm, aber das Programm drucken Informationen können nicht auf dem lokalen PC in Echtzeit angezeigt werden. Wenn mein C-Programm setbuf(stdout, NULL); verwendet, um nicht zu puffern, kann mein PC Echtzeit-Informationen erhalten; Ich möchte wissen, ob das C-Programm nicht nicht puffern, wie kann ich die Remote-Echtzeit-Informationen auf dem lokalen PC bekommen.Warum Paramiko SSH kann nicht die Druckinformationen in Echtzeit

Hier ist mein Code:

def get_ssh_log(hostip, login_name, pw, privaete_key, cmd): 
    ssh = paramiko.SSHClient() 
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
    ssh.connect(hostname='%s' % hostip, port=22, username='%s' % login_name, password='%s' % pw,key_filename='%s' % privaete_key) 
    stdin, stdout, stderr = ssh.exec_command("%s" % cmd, bufsize=1) 
    for line in iter(stdout.readline, ""): 
     print(line) 
    ssh.close() 
+1

Sie wissen, ' "% s" % cmd' ist nur' cmd' richtig? –

+0

Ich schätze der Kommentar von @JohnZwinck gilt auch für alle anderen Verwendungen des '%' Operators in dieser Funktion. – BlackJack

+0

@JohnZwinck ja, ich weiß "% s"% cmd ist nur cmd; – simon

Antwort

0

Sie können unbuffer aus dem expect Paket jedes Programm unter dem Wrapper laufen. In Ihrem Fall:

ssh.exec_command("unbuffer %s" % cmd) 

Natürlich setzt dies voraus, unbuffer auf dem Zielrechner installiert ist.

Ref: https://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe

+0

Das Remote-Gerät ist ein Embed-Gerät, das openwrt läuft, es ist nicht praktisch, ein Paket darauf zu installieren. Wenn es anderswo in python3 im lokalen PC gibt, der die Ausgabe in Echtzeit bekommen kann. Danke. – simon

+0

@simon: Dann können Sie das Unbuffer-Programm selbst implementieren, vielleicht in Python, und SFTP verwenden, um es vor der Ausführung auf das Ziel zu kopieren. Quellcode für ein solches Programm ist hier: http://man7.org/tlpi/code/online/dist/pty/unbuffer.c.html –

Verwandte Themen