Expect 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. (written 2007-10-26 23:42:29)
Associated topics are indexed under
T211 - Tcl/Tk - What is Expect? Why use it? [2489] Parallel Pinging, using Python Threads or Expect spawn lists - (2009-11-02)
[2474] Using Tcl and Expect to automate repetitive jobs - (2009-10-24)
[1602] Automating processes through Expect - (2008-04-05)
[1531] Expecting a item from a list of possibles - (2008-02-04)
[1469] Curley brackets v double quotes - Tcl, Tk, Expect - (2007-12-12)
[1411] Buffering of inputs to expect, and match order - (2007-10-27)
[1174] Installing Tcl and Expect on Solaris 10 - a checklist - (2007-05-02)
[1173] Cheat Sheet / Check list for Expect maintainers - (2007-05-02)
[435] Expect for Windows - (2005-09-04)
[286] Automating regular manual procedures - (2005-04-21)
Some other Articles
The little gestures that can really countSparse and Greedy matching - Tcl 8.4Tcl / regsub - changing a string and using interesting bitsWhat is Expect?Wireless hotel tips - FTP and Skype connections failingReading from another process in Tcl (pipes and sockets)Away or home - which do I prefer?Sorting in Tcl - lists and arraysTcl - global, upvar and uplevel.