如果密码失败,Python pexpect Help循环返回

2024-10-02 02:33:37 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我对开发相当陌生,所以我决定一个好的自学方法是创建一个小脚本,通过SSH配置Cisco交换机/路由器。 我有点困在一个循环上。在

基本上用户已经通过SSH进入交换机用户名@ip_地址现在他们需要输入密码。 不过,我需要的是,如果失败,它将返回到需要登录密码(因为很可能是因为输入了错误的密码)

x = 'false5'

while x != 'true5':
    switch_ssh_password = raw_input('What is the Login Password: ')
    #Commands to grant entry level access
    child.expect('password:')
    child.sendline(switch_ssh_password)
    if child.expect('%>'):
            print "1 - Entry to Switch was Granted"
            x = 'true5'
    else:
            print "1 - Entry to Switch was Denied, Try Again"
            x = 'false5'

现在当我进入这个用户输入,我输入密码,它挂起大约30秒,然后返回这个,我不知道出了什么问题:(

^{pr2}$

Tags: to用户child密码passwordsshexpect交换机
2条回答

所以我重写了你的代码,就好像我自己在写一样,(还把你的一些东西放在那里)测试了它并确保它正常工作,你可以在这里看到它:

Pastebin code

我的编码风格是多种语言和风格的混合体,所以不要太专注于此。但是,看看我是如何处理IP地址的。在这个过程中,我确实发现了一些错误:

1)expect函数可以捕捉超时,而不是引发异常。这是一个更好的编程实践。执行此操作时,它将返回找到的项的列表中的索引(在本例中为0)。您应该花些时间阅读pexpect的完整文档,使用搜索功能它帮助很大,这些模块通常非常强大,功能也很丰富,所以您可能会错过您需要的真正功能,可以说,您在自己的代码中重新发明了轮子。在

2)如果你看看你的错误,你可以看到:

buffer (last 100 chars): ' \r\n\r\nryan-sw01>'

因此,它确实成功地连接到主机nryan-sw01,您现在看到的是一个提示符,但您要查找的是“%>;”,而不仅仅是“>;”

如果没有你所有的代码,你很难弄清楚到底发生了什么。但是根据您发布的查找shell字符的超时信息,对于一些额外的诊断,我将稍微更改一下您的代码:

while True:
    switch_ssh_password = raw_input('What is the Login Password: ')
    #Commands to grant entry level access
    child.expect('password:')
    child.sendline(switch_ssh_password)
    if child.expect('%>'):
        print "1 - Entry to Switch was Granted"
        break
    elif child.expect('Permission denied'):
        print "Password Error or some message..."
    else:
        print "1 - Entry to Switch was Denied, Try Again"

相关问题 更多 >

    热门问题