Frage

Ich möchte einige Programm durch ssh auszuführen und leiten seine Eingabe aus einer Datei. Das Verhalten des folgenden Code:

channel.exec_command('cat')
with open('mumu', 'r') as f:
    text = f.read()
    nbytes = 0
    while nbytes < len(text):
        sent = channel.send(text[nbytes:])
        if sent == 0:
            break
        nbytes += sent

sollte (unter der Annahme, Public-Key-Authentifizierung) äquivalent sein:

 ssh user@host cat < mumu

Doch die Anwendung hängt für mehr Input warten. Ich denke, dass dies geschieht, weil der stdin Strom nie geschlossen. Wie kann ich das tun?

War es hilfreich?

Lösung

shutdown() ( oder shutdown_write()) auf dem Kanal.

Andere Tipps

Rufen Sie die Methode. channel.shutdown_write()

Als ich nicht einen Kanal verwenden explizit hatte ich es ein bisschen anders zu machen. Für wen könnte es hilfreich sein:

client = paramiko.SSHClient()
connection = client.connect(hostname)
stdin, stdout, stderr = connection.exec_command('cat')
stdin.write('spam')
# Close the channel, this results in an EOF for `cat`.
stdin.channel.shutdown_write()
# stdout/stderr are readable.
print(stdout.read().decode())
print(stderr.read().decode())
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top