telnet с pexpect lib в python

я хочу запустить telnet в python с pexpect lib, и я хочу, если пароль telnet верен, печатать верно и неправильно, печатать неправильно... теперь мой код:

import pexpect

ip="192.168.1.1"
password="admin"

child = pexpect.spawn("telnet "+ip+" -l admin", timeout=2)
child.expect ("Password:")
child.sendline ("admin")
child.expect(b"> ")
child.sendline ("ls")
child.close()
result = child.signalstatus
if result == 1:
    print ("Success")
else:
    print ("Bad Result")

в верхнем коде, когда пароль верен, скрипт работает хорошо и отображает «успех», но когда пароль неверен, скрипт не отображает «плохой результат» и просто отображает много ошибок.

как мне это сделать?


person Ys Ys    schedule 28.05.2017    source источник


Ответы (1)


Когда вы ввели неверный пароль, вы не обрабатываете его изящно, поэтому возникает исключение тайм-аута, а child.close() никогда не выполнялся. Ошибки, которые вы видите, являются только сообщениями печати, связанными с исключениями.

Решение: вы можете передать список ожиданий и обработать их соответствующим образом.

child = pexpect.spawn("telnet "+ip+" -l admin", timeout=2)
child.expect ("Password:")
child.sendline ("admin")
result = child.expect(["> ", pexpect.TIMEOUT])
if result == 0: #means prompt was caught successfully i.e. password was correct
    child.sendline ("ls")
    print ("Success")
elif result == 1:
    print ("Bad Result")
child.close()

На самом деле, это можно сделать функцией, где вы можете обрабатывать больше исключений и специальных сценариев в соответствии с вашим вариантом использования.

person satyakrish    schedule 25.01.2018