I have a problem with getting piping to work with paramiko.
ssh = paramiko.SSHClient() [...] stdin, stdout, stderr = ssh.exec_command("find /tmp") stdout.read()
Esto hace no work (blocks forever on stdout.read()):
[...] stdin, stdout, stderr = ssh.exec_command("bash -") stdin.write("find /tmp\n") stdin.close() stdout.read()
I looked at the source code for paramiko, and ChannelFile.close does not really do anything in terms of communication. So I looked at the channel API, and this seems to work:
stdin.write("find /tmp\n") stdin.flush() stdin.channel.shutdown_write() stdout.read()
preguntado el 08 de noviembre de 11 a las 15:11
With some investigation, it appears that
stdin.close() does not actually end the bash session. To do that, you could use the bash command
stdin.write('exit\n')) or dig into the paramiko
Channel object underneath the
If you'd like the bash session to continue for another command, you'll need to use the channel object directly. The documentación para
recv(self, nbytes) which will allow you t check for the data before you try to get it.