Wie EOF zu stdin in paramiko schicken?
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?
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