What is Expect?
Archive - Originally posted on "The Horse's Mouth" - 2007-10-26 23:42:29 - Graham EllisExpect is an extension to the Tcl language which provides three key new commands - spawn which lets you start up another process, send which lets you send information to that process and expect through which you can receive back responses from that process.
For the majority of users of Tcl, Expect is not relevant in their day to day use of the language. But for a significant minority, it is vital and indeed the whole reason that they're using Tcl in the first place.
Here's an example of an Expect session which connects to a remote host computer via ssh, grabs some data from that remote system, extracts vital reporting information from that system and gives a qucik, clear and easy report.
puts "This is a bit o' Tickle"
log_user 0
spawn ssh -l trainee 192.168.200.67
expect "sword: "
send "abc123\r"
expect {$ }
send "df -k\r"
expect {$ }
set igot $expect_out(buffer)
send "exit\r"
regexp {(\d+)%} $igot all numbah
puts "First reported disk slice is $numbah/100 full"
puts "That were easy, weren't it?"
Result is:
earth-wind-and-fire:~/oct07/camb grahamellis$ expect se1
This is a bit o' Tickle
First reported disk slice is 97/100 full
That were easy, weren't it?
earth-wind-and-fire:~/oct07/camb grahamellis$
Expect is used in test environments, in integrated cirsuit design, in general systems admin tasks ... and many more places. Anywhere that you want to automate command line actions. And you do ned a good understanding of Tcl before you can use it - we cover both Tcl and the handful of extra Expect commands on our public Tcl Programming course, and on private courses we can tailor the presentation to inlcude much more expect coverage.
We use Expect on our own web site ... have a look at our Server Status page and you'll get a report from various web servers where we host domains - it's genarated by an expect scrips which uses the ping utility to test all the hosts in parallel.
Note - the example above is a training example - a spike solution. A live piece of code would include various other error checking operations, handling situations where the remote connection failed, for example.