Get output from a Paramiko SSH exec_command continuously Get output from a Paramiko SSH exec_command continuously python python

Get output from a Paramiko SSH exec_command continuously


A minimal and complete working example of how to use this answer (tested in Python 3.6.1)

# run.pyfrom paramiko import SSHClientssh = SSHClient()ssh.load_system_host_keys()ssh.connect('...')print('started...')stdin, stdout, stderr = ssh.exec_command('python -m example', get_pty=True)for line in iter(stdout.readline, ""):    print(line, end="")print('finished.')

and

# example.py, at the serverimport timefor x in range(10):    print(x)    time.sleep(2)

run on the local machine with

python -m run


As specified in the read([size]) documentation, if you don't specify a size, it reads until EOF, that makes the script wait until the command ends before returning from read() and printing any output.

Check this answers: How to loop until EOF in Python? and How to do a "While not EOF" for examples on how to exhaust the File-like object.


I was facing a similar issue. I was able to solve it by adding get_pty=True to paramiko:

stdin, stdout, stderr = client.exec_command("/var/mylongscript.py", get_pty=True)