Вместо вызова exec_command на клиенте, заполучите транспорт и создайте свой собственный канал. канал может использоваться для выполнения команды, и вы можете использовать ее в операторе выбора, чтобы выяснить, когда можно прочитать данные:
#!/usr/bin/env python
import paramiko
import select
client = paramiko.SSHClient()
client.load_system_host_keys()
client.connect('host.example.com')
transport = client.get_transport()
channel = transport.open_session()
channel.exec_command("tail -f /var/log/everything/current")
while True:
rl, wl, xl = select.select([channel],[],[],0.0)
if len(rl) > 0:
# Must be stdout
print channel.recv(1024)
Объект канала может считываться и записываться, соединяясь с stdout и stdin удаленной команды. Вы можете получить на stderr, позвонив channel.makefile_stderr(...)
.
Я установил время ожидания на 0.0
секунд, потому что было запрошено неблокирующее решение. В зависимости от ваших потребностей, вы можете заблокировать с ненулевым таймаутом.