Can
Can

Reputation: 145

Paramiko stdout.readlines() is too slow

I am using Paramiko in my Python and Django code to execute command. Here is my code:

client = SSHClient()
client.set_missing_host_key_policy(AutoAddPolicy())
client.connect(<host>, username=<username>, password=<password>)
            
stdin, stdout, stderr =
    client.exec_command("curl -X POST http://127.0.0.1:8080/predictions -T image.jpg")
lines = stdout.readlines()

The execution time of stdout.readlines() is 0.59s for each command. This is not acceptable time for my close-to-real time system. Could anyone give any suggestion to make reading process faster?

Upvotes: 1

Views: 675

Answers (1)

Martin Prikryl
Martin Prikryl

Reputation: 202272

The SSHClient.exec_command only starts the command. It does not wait for the command to complete. That's what readlines does. So the readlines takes as long as the command does.


Obligatory warning: Do not use AutoAddPolicy – You are losing a protection against MITM attacks by doing so. For a correct solution, see Paramiko "Unknown Server".

Upvotes: 1

Related Questions