python paramiko S SH l oop не показывает команды в правильном порядке - PullRequest
0 голосов
/ 12 февраля 2020

Когда я запускаю следующий код, я получаю искаженный результат:

...

######## Make connection

remote_conn_pre=paramiko.SSHClient()
remote_conn_pre.set_missing_host_key_policy(paramiko.AutoAddPolicy())
remote_conn_pre.connect(ip, port=22, username=username,
                        password=password,
                        look_for_keys=False, allow_agent=False)

remote_conn = remote_conn_pre.invoke_shell()

######## commands read from JSON file (commands)

for command in commands["normal"]:
    print("-- command: " + command)
    remote_conn.send(command + "\n")
    while not remote_conn.recv_ready():
        time.sleep(0.300)
    output = remote_conn.recv(buffersize)
    print(output.decode())

...

Результат вывода:

-- command: sh run | section dhcp
sh run | sec dhcp

-- command: sh run | i ip route
ip dhcp bootp ignore 
sh run | i ip route
ip route 0.0.0.0 0.0.0 vlan 1

Как вы можете видеть «ip dhcp bootp ignore» результат должен находиться в «разделе DHCP» , а не в «разделе маршрута» .

Правильный результат должен be:

-- command: sh run | section dhcp
sh run | sec dhcp
ip dhcp bootp ignore 

-- command: sh run | i ip route
sh run | i ip route
ip route 0.0.0.0 0.0.0 vlan 1

Что здесь не так? Я подумал, что команда не готова, поэтому встроил таймер сна. Тем не менее, кажется, что буфер не пуст или не готов после этого.

1 Ответ

0 голосов
/ 12 февраля 2020

Поскольку вы не ждете, пока команда завершит sh, перед отправкой другой. И на самом деле нет никакого способа сделать это с SSHClient.invoke_shell (S SH канал "shell"). Канал "shell" не предназначен для автоматизации команд.

Вместо этого используйте SSHClient.exec_command (S SH "exe c" канал).
См. Дождитесь завершения задачи на удаленном компьютере через Python

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