2014-12-12 3 views
0

Я новичок ожидать сценариев, я хочу написать что-то вроде этого:в то время как цикл в сценарий ожидать

set variable; 
$variable = expect -exact "\/----Enter Password----\\" 
while { != $variable } { 
send -- {^[-} 
} 

Я хочу, чтобы продолжать посылать побег + дефиса, пока я не ожидал такой запрос: «/ - --Введите пароль----\". Я написал код выше, но он не работает. Как мне это сделать, любезно помогите мне.

ответ

3

Чтобы справиться с этой ситуацией, вы можете использовать exp_continue. Команда exp_continue позволяет ожидать, что она продолжит выполнение, а не возвращение, как обычно. Это полезно для избежания явных циклов или повторных ожидающих операторов. По умолчанию exp_continue сбрасывает таймер . Таймер не перезапускается, если exp_continue вызывается с флагом -continue_timer.

В expect время ожидания по умолчанию составляет 10 секунд. то есть время, до которого expect будет ожидать появления ожидаемой строки.

мы использовали, чтобы дать ожидаемую строку в expect как что-то вроде

expect "name" 

, который будет ждать «Имя» строки и перейти к следующему оператору, если тайм-аут произошло. Для обработки сценария тайм-аута мы используем ключевое слово timeout в expect.

expect { 
     "name" { # Some code here } 
     timeout { # timeout_hanlder_code_here } 
} 

Вы можете изменить timeout значение с помощью set команды, как показано ниже.

set timeout 60; # Timeout will happen after 60 seconds. 

Таким образом, объединив все вместе в одном кадре,

expect { 
     # If the phrase 'Enter Password' seen, then it will send the password 
     "Enter Password" {send "yourpassword\r"} 
     # If 'timeout' happened, then it will send some keys & 
     # 'expect' will be looped again. 
     timeout {send -- {^[-}; exp_continue} 
} 

Примечание: Я вижу проблему в вашем коде. Вы упомянули, что вам нужно отправить escape + дефис. Но вы отправляете только буквенную квадратную скобку ([) и символ дефиса (-). Если он работает, тогда хорошо, и вам не нужно читать этот раздел «Примечание». Скачайте его. Продолжайте читать ниже.

Вы должны отправить фактический символ Escape в программу. Это может быть сделано как

send -- \033-; # Sending Escape + hyphen together 

Что это \033? Это восьмеричный код для клавиши Escape. Затем вместе с этим мы просто объединяем дефис с его символом как -, результатом которого является \033-. Таким образом, наш окончательный код будет,

expect { 
      # If the phrase 'Enter Password' seen, then it will send the password 
      "Enter Password" {send "yourpassword\r"} 
      # If 'timeout' happened, then it will send some keys & 
      # 'expect' will be looped again. 
      timeout {send -- \033-; exp_continue} 
    } 

Ссылка: Tcl's wiki & ASCII Char Table

+0

Спасибо Динеш нашли время, чтобы написать ответ. Я использовал autoexpect, и всякий раз, когда я вводил escape-дефис, скрипт autoexpect генерировал этот символ «^ [-». Поэтому я думал, что это должны быть персонажи. Я попробую то, что вы посоветовали, и дайте вам знать результат. – Aaron88

+0

Это работает Динеш. Большое спасибо. – Aaron88

 Смежные вопросы

  • Нет связанных вопросов^_^