I'm trying to run a remote Python script using Paramiko and have it forward anything Python prints back to the client in realtime (i.e. continuous stdout). I connect to my server by calling my class with the following:
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)
I then send commands to the server through my send_command function:
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.")
Normally, this would work with any continuous/looping command that fills the buffer on stdout as it loops. My problem is that for some reason stdout is filled only when the Python script finishes running, and anything that Python would output comes up only AFTER the script finishes. I want it to print while the script is running. This is the test script I'm using:
from time import sleep
print("Test.")
sleep(1)
print("Test again.")
sleep(2)
print("Final test.")
Is there a way around this or am I doing anything wrong? Thanks in advance.