Paramiko висит на stdout.readlines () на некоторых устройствах llinux, но отлично работает на других - PullRequest
0 голосов
/ 06 июня 2019

Я использую paramiko для выполнения команд на другом сервере, и большую часть времени он работает нормально, но для некоторых серверов он зависает после выполнения нескольких команд.

Я хотел бы знать, как устранить неполадки и понятьпроблема.

это код, который у меня есть.

import paramiko 

client = paramiko.SSHClient()
client.set_missing_host_ley_policy(paramiko.AutoAddPolicy)
ssh = client.connect('hostname,username,password')
channel = ssh.invoke_shell()

stdin = channel.makefile('wb')
stdout = channel.makefile('r')


stdin.write(cmd+'\n')
stdin.flush()


#it hangs here
for line in stdout: 
    print(line)

1 Ответ

0 голосов
/ 06 июня 2019

Вы написали цикл for для чтения вывода некоторой команды, которую вы выполнили ранее.Эта команда работает постоянно?Если да, то вам нужно читать буфер постоянно.

Попробуйте записать логику чтения, например for line in iter(lambda: stdout.readline(2048), ""): print(line) Поскольку, если вы не укажете размер, он читает до EOF, что заставляет скрипт ждать до завершения командывозврат из read () и печать любого вывода.
См. это: Paramiko, exec_command непрерывно получать поток вывода

...