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

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

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

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() 

One Solution collect form web for “Парамико: блокирование блоков навсегда”

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

 stdin.channel.shutdown_write() 

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

  • застрял со статусной проверкой экземпляра amazon ec2
  • Проверьте, существует ли путь на удаленном хосте, используя paramiko
  • Лучший способ запуска удаленных команд через ssh в Twisted?
  • Самый простой способ запустить сценарий ожидания из python
  • Использование os.forkpty () для создания псевдотерминала для ssh на удаленный сервер и для связи с ним
  • Запрос пароля в IPython ноутбуке
  • sqlalchemy подключиться к базе данных VPS
  • Парамико: перенаправление портов вокруг NAT-маршрутизатора
  • Python - лучший язык программирования в мире.