В Paramiko выполните команды из списка или слова и сохраните результат в виде списка или слова - PullRequest
0 голосов
/ 12 сентября 2018

В Paramiko, как передать список или диктовку на exec_command и сохранить результаты в список или диктовку?

  1. Мне нужно sleep между exec_command.

  2. Команды выполняются не последовательно, а в порядке 1, 2, 1.

stdin, stdout, stderr = ssh.exec_command(d.values()[0])

reuslt1 = stdout.read()

stdin, stdout, stderr = ssh.exec_command(d.values()[1])

reuslt2 = stdout.read()

stdin, stdout, stderr = ssh.exec_command(d.values()[0])

reuslt3 = stdout.read()

Если нет упомянутых выше двух проблем, я попробовал map(), он отлично работает.

cmd = ['xxx', 'xxx']

def func(cmd):
    stdin, stdout, stderr= ssh.exec_command(cmd)
    result = stdout.read()
    return result

list(map(func, cmd))

Моя проблема в том, что мне нужно SSH удаленного Linux, заменить строку в файле.

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip, port, username, password)

command = {
    "search" : "grep$img_name ='string' file",
    "modify" : "sed -i 's/$img_name = $now/$img_name = $word/g' file",
}

stdin, stdout, stderr = ssh.exec_command(command.values()[0])
before = stdout.read()
sleep(1)    ##If I don't add the wait, I will grep the string twice before the modification.
ssh.exec_command(command.values()[1])
sleep(1)
stdin, stdout, stderr = ssh.exec_command(command.values()[0])
after = stdout.read()    ##Confirm that my modification was successful
ssh.close() 

Я не хочу повторять кодирование stdin, stdout, stderr = ssh.exec_command().

1 Ответ

0 голосов
/ 13 сентября 2018

Полагаю, вы ищете это: Перебор словарей с использованием циклов 'for' .

Итак, в Python 3:

for key, value in command.items():
    stdin, stdout, stderr = ssh.exec_command(value)
    results[key] = stdout.read()

Относительноsleep: stdout.read() не только читает выходные данные команды.Как побочный эффект чтения выходных данных, он ожидает завершения команды.Поскольку вы не набираете stdout.read() для sed, вы не ждете, пока он завершится.Фактически, цикл for, приведенный выше, также должен решить эту проблему, поскольку он ожидает завершения всех команд, включая sed.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...