Python Paramiko - дождаться большего вывода от переданной команды перед выходом - PullRequest
0 голосов
/ 06 июня 2018

У меня есть следующий код

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.client.AutoAddPolicy())
privatekeyfile = 'PK_FILE_PATH'
username ="USERNAME"
mykey = paramiko.RSAKey.from_private_key_file(privatekeyfile)
client.connect(hostname= IP, username=username, pkey=mykey)
command = SERVER_COMMAND

stdin, stdout, stderr = client.exec_command(command)
while not stdout.channel.exit_status_ready():
  if stdout.channel.recv_ready():
    stdoutLines = stdout.readlines()
print stdoutLines

На выполнение команды, которую я выполняю, уходит около 10 секунд.Сначала он возвращает некоторую информацию (профиль пользователя и версию модуля), затем запускает некоторый код для проверки состояния некоторых ресурсов локального сервера.

Paramiko закрывает соединение после получения информации начального заголовка.Мне нужно, чтобы он дождался полного вывода команды serveride для возврата.Я попытался реализовать решение Тинтина здесь, с тем же результатом

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 23 января 2019

add get_pty=True Это будет ожидать завершения выполнения команды.stdin,stdout,stderr = self.ssh.exec_command(command,get_pty=True)

0 голосов
/ 07 июня 2018

Paramiko закрывает соединение после получения начальной информации заголовка.

Не думаю, что это правда.Попробуйте выполнить команду вроде

command = 'echo first && sleep 60 && echo second'
while not stdout.channel.exit_status_ready():
  if stdout.channel.recv_ready():
    stdoutLines = stdout.readlines()
    print stdoutLines

Вы получите обе строки (также обратите внимание, что я печатаю строки внутри цикла, чтобы вы могли видеть строки).

Это должно быть что-тос вашей командой, например:

  • Команда выводит окончательный вывод на stderr, а не stdout.
  • Команда не выводит окончательный вывод при выполнении без TTY.
  • Команда представляет собой сценарий, который выполняет подкоманду в фоновом режиме, поэтому сценарий завершается перед подкомандой.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...