Парамико: блокирование блоков навсегда
У меня проблема с подключением трубопроводов к парамико.
Это работает:
- Параллельный SSH в Python
- Python + SSH Password auth (нет внешних библиотек или общедоступных / закрытых ключей)?
- Python paramiko script, проблемы с чтением вывода во время exec_command ()
- Почему Pariko зависает, если вы используете его при загрузке модуля?
- Запуск Fabric с скриптом Python вместе
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)
которые позволят вам проверить данные, прежде чем пытаться их получить.
- pandas эффективный набор кадров данных
- Панды: присоединяйтесь к DataFrames в поле с разными именами?