Я пытаюсь запустить удаленный скрипт Python, используя Paramiko, и переслать ему все, что Python выводит обратно клиенту в режиме реального времени (то есть непрерывный стандартный вывод). Я подключаюсь к своему серверу, вызывая мой класс со следующими данными:
class SSH:
client = None
def __init__(self, address, username, password):
self.client = client.SSHClient()
self.client.set_missing_host_key_policy(client.AutoAddPolicy())
self.client.connect(address, username=username, password=password, look_for_keys=False)
Затем я отправляю команды на сервер через мою функцию send_command
:
def send_command(self, command):
if(self.client):
stdin, stdout, stderr = self.client.exec_command(command)
for i in range(5): # just print 5 bytes
print(stdout.channel.recv(1))
time.sleep(0.1)
else:
print("Connection not opened.")
Как правило, это будет работать с любой непрерывной / циклической командой, которая заполняет буфер на stdout при его зацикливании. Моя проблема в том, что по какой-то причине стандартный вывод заполняется только после завершения работы скрипта Python, а все, что выводит Python, появляется только ПОСЛЕ завершения скрипта. Я хочу, чтобы он печатал , пока скрипт запущен. Это тестовый скрипт, который я использую:
from time import sleep
print("Test.")
sleep(1)
print("Test again.")
sleep(2)
print("Final test.")
Есть ли способ обойти это или я делаю что-то не так? Заранее спасибо.