【问题标题】:Perl - Repeat expect() until input is acceptedPerl - 重复 expect() 直到输入被接受
【发布时间】:2014-09-10 23:51:01
【问题描述】:

我正在使用 Perl 在某些 Cisco 路由器上自动执行脚本。基本实现是它一个接一个地连接到给定的路由器列表并收集所需的信息。每次脚本连接到一个新路由器时,它都会请求一个密码,这对所有路由器都是一样的。

我有以下代码来捕获密码请求并输入密码:

    $session->expect(5, 
        [ 'password:' => sub {
            $session->send("$password\r");
                #exp_continue;
            }]);   

问题是有时密码在第一次时不被接受,无论出于何种原因。有没有办法重复上述代码,直到密码被接受?

【问题讨论】:

    标签: perl cisco-ios


    【解决方案1】:

    超级简单的实现:

    my $tries = 0;
    my $max = 5;
    while ($tries < $max) {
        $tries++;
        # do your stuff
        # assuming that you can assess the success of the password sending:
        last if <test for successful condition>;
    }
    

    您可以将最大尝试次数设置为适合您情况的任何值。

    【讨论】:

    • 更多的是一个问题,询问是否期望返回的东西表明输入密码失败,但还是谢谢你!我在一个while循环中使用了expect,该循环继续尝试,直到输出仅在设备登录时才输出的内容。
    猜你喜欢
    • 2016-11-19
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多