2015-04-27 1 views
0

Я полностью новый в ожидании, и я хочу запустить свой скрипт Python через Telnet. Этот скрипт py занимает около 1 минуты, но когда я пытаюсь запустить его через Telnet с Expect - он не работает.Ожидайте - дождитесь окончания процесса

я это ожидал простой код:

#! /usr/bin/expect 
spawn telnet <ip_addr> 
expect "login" 
send "login\r" 
expect "assword" 
send "password\r" 
expect "C:\\Users\\user>\r" 
send "python script.py\r" 
expect "C:\\Users\\user>\r" 
close 

Когда я заменить script.py с одним с более коротким временем выполнения - он прекрасно работает. Не могли бы вы сказать мне, что мне следует изменить, поэтому я могу дождаться завершения процесса script.py? Должен ли я использовать тайм-аут или спать?

+0

Пожалуйста, пост выход из рабочих и нерабочих решения. Также может быть полезен сетевой захват. –

ответ

1

Если вы уверены, что о времени выполнения сценария, то вы можете добавить sleep или установить timeout до требуемого значения

send "python script.py\r" 
sleep 60; # Sleeping for 1 min 
expect "C:\\Users\\user>"; # Now expecting for the prompt 

Или

set timeout 60; 
send "python script.py\r" 
expect "C:\\Users\\user>"; # Now expecting for the prompt 

Но, если время вариант, затем лучше обработать событие timeout и дождаться подсказки до некоторого времени. т.е.

set timeout 60; # Setting timeout as 1 min; 
set counter 0 
send "python script.py\r" 
expect { 
    # Check if 'counter' is equal to 5 
    # This means, we have waited 5 mins already. 
    # So,exiting the program. 
    if {$counter==5} { 
     puts "Might be some problem with python script" 
     exit 1 
    } 
    # Increase the 'counter' in case of 'timeout' and continue with 'expect' 
    timeout { 
     incr counter; 
     puts "Waiting for the completion of script..."; 
     exp_continue; # Causes the 'expect' to run again 
    } 
    # Now expecting for the prompt 
    "C:\\Users\\user>" {puts "Script execution is completed"} 
} 
+0

Спасибо за этот ответ! – mchfrnc

+0

Ваша логика счетчика не совсем правильная: вы хотите инициализировать значение threshold_limit равным нулю. –

+0

@glenn: Спасибо !. Обновлено правильно. – Dinesh

0

Более простой вариант: если вы не заботитесь, сколько времени требуется для завершения:

set timeout -1 
# rest of your code here ...