Парамико: блокирование блоков навсегда

У меня проблема с подключением трубопроводов к парамико.

Это работает:

ssh = paramiko.SSHClient() [...] stdin, stdout, stderr = ssh.exec_command("find /tmp") stdout.read() 

Это не работает (блоки навсегда на stdout.read ()):

 [...] stdin, stdout, stderr = ssh.exec_command("bash -") stdin.write("find /tmp\n") stdin.close() stdout.read() 

Есть идеи?

РЕДАКТИРОВАТЬ:

Я посмотрел исходный код paramiko, и ChannelFile.close на самом деле ничего не делает с точки зрения связи. Поэтому я посмотрел API канала, и это, похоже, работает:

 stdin.write("find /tmp\n") stdin.flush() stdin.channel.shutdown_write() stdout.read() 

С некоторыми исследованиями, похоже, что stdin.close() фактически не заканчивает сессию bash. Для этого вы можете использовать exit команды bash ( stdin.write('exit\n') ) или выкопать в объект paramiko Channel под объектом stdin :

 stdin.channel.shutdown_write() 

Если вы хотите, чтобы сеанс bash продолжался для другой команды, вам нужно будет напрямую использовать объект канала. Документация для Channel упоминает recv_ready(self) и recv(self, nbytes) которые позволят вам проверить данные, прежде чем пытаться их получить.