Training, Open Source computer languages

This is page http://www.wellho.net/forum/The-Tcl- ... guage/eof-kills-my-script.html

Our email: info@wellho.net • Phone: 01144 1225 708225

 
For 2023 (and 2024 ...) - we are now fully retired from IT training.
We have made many, many friends over 25 years of teaching about Python, Tcl, Perl, PHP, Lua, Java, C and C++ - and MySQL, Linux and Solaris/SunOS too. Our training notes are now very much out of date, but due to upward compatability most of our examples remain operational and even relevant ad you are welcome to make us if them "as seen" and at your own risk.

Lisa and I (Graham) now live in what was our training centre in Melksham - happy to meet with former delegates here - but do check ahead before coming round. We are far from inactive - rather, enjoying the times that we are retired but still healthy enough in mind and body to be active!

I am also active in many other area and still look after a lot of web sites - you can find an index ((here))
eof kills my script

Posted by selfism (selfism), 14 February 2005
Howdy & Thank you in advance!!

My script logs into remote systems and executes commands. I am trying to make my script fault tolerant by explicitly "expecting eof".  Even though I set my eof action to "continue"  rather than exit, it still kills my script. I test this by launching my script, it begins executing commands on the remote system, then I kill the spawned ssh connection. My script never recovers.  Here is the suspect code snippet:

Login to remote system.....
Begin executing commands via a foreach loop.....
expect  {
timeout
{
  puts "timed out"
   continue    <---- this works !
}

eof
{
   puts "Lost connection to remote system"
   continue <---- NO WORKY !! the eof just kills my script
}

-re "$prompt"
{
  send -- "Next cmd\r"
}
}


p.s. Once I get this to work it seems I could wrap both "timeout" & "eof" into a expect_after statement. Then I could wrap the expect_after and the overall "expect" statement into a sendexpect {}... does this sound resonable?

Posted by admin (Graham Ellis), 14 February 2005
What do you want the continue to do?

EOF means "END of file" and so nothing is going to come after it. Once you've got to the end - once you've finished reading all the information back and the child process has completed, you can't ask for more.

Posted by selfism (00oo), 14 February 2005
I guess I assumed it would continue my server foreach loop which I didn't show in my code previously.

foreach server....
spawn connection
login...
foreach cmd....
eof ---> kills my script, I am trying to get my script to move to the next server. Normaly my script will execute the commands and will move to the next server but if I get an eof while on a remote machine it dies. My script successfully moves past machines that are unavailable too, it is only the end of frame that causes the issue. Is there away I can catch eof to keep it from causing my script to die?

Posted by admin (Graham Ellis), 14 February 2005
I think you can just take the continue out and let it drop into the following code can't you?  It's the saying that you're still expecting more from a dead spawn that's causing the problem.  If you want to take a different action once you've exited the expect depending on whether or not the expect finished for EOF or some other reason, set a variable in the eof condition clause and check it later with an if.

Hope this is making sense - I'm doing it from memory as I'm in Germany and my books are in England this week!

Posted by selfism (00oo), 14 February 2005
Ok, that makes perfect sense. I will try it out and post the results!

Thank you !!!

Posted by selfism (00oo), 18 February 2005
Ok, I finally figured it out. EOF ends the current expect statement not the entire script. However, if the script attempts to send to a non-existant spawn id it will terminate. That is exactly what my script was doing. I was killing the ssh session on the remote system which would return "eof" and cause the expect statement to return.... but I returned to my command loop, hence another command was sent to a now non-existant spawn id which would kill my script.

The soluiton: use break instead of continue, thus when my expect statement saw the eof it would break out of the current loop.

eof
{
   puts "Lost connection to remote system"
   break
}


Thank you for your help, sorry it took me so long to reply but that is how long it took me to figure it out.



This page is a thread posted to the opentalk forum at www.opentalk.org.uk and archived here for reference. To jump to the archive index please follow this link.

© WELL HOUSE CONSULTANTS LTD., 2024: Well House Manor • 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • FAX: 01144 1225 793803 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho