Version 170 of Expect

Updated 2013-03-22 00:23:02 by pooryorick

Summary

Expect is known primarily as an indispensable application for system administrators. Amazingly enough, it is, at its heart, Just Another Tcl Extension (JATE).

Description

People use Expect to automate interaction with non-GUI (and typically non-cursor-controlled, even though a persevering Expect programmer can tackle them, too) applications that prompt the user for input.

Examples of commands that often appear in Expect scripts are the Unix passwd, ftp, telnet, ssh, sudo, and command-line shells. Expect is the natural answer for those who want to automate password changes, periodically update FTP sites, manage Cisco routers, or check the statuses of a collection of remote systems by logging in.

What: Expect
Where: http://expect.sf.net/ 
       http://expect.nist.gov/ 
       http://expect.nist.gov/FAQ.html 
       http://expect.nist.gov/scripts/ 
       ftp://ftp.nist.gov/mel/div826/subject/expect/ 
       http://prdownloads.sf.net/expect/slavedrv1.1.zip 
       http://phaseit.net/claird/comp.lang.tcl/expect.html 
Description: Expect is a scripting language to interace with programs
        such as FTP, telnet, fsck, and others that normally cannot be
        automated from a shell script. Think of it as providing the means
        to 'remote control' other programs. It is thus also good for
        automating program exection on remote systems, and providing the
        means to creating Tk interfaces on top of other, non-GUI, programs
        V5.x is Tcl 7.x compatible. 
        The version on liv, while not from the author, is a set of source 
        modified to be used with tclX, BLT, and TkSteal (unmaintained). 
        V5.28 (the tar.gz version) is Tcl 8.0 compatible. 
        This package will also build expectk, which allows one 
        to write Tk interfaces to the above types of programs.
        The version at berkeley is a release of Expect for Windows NT,
        which includes patches to Tcl to allow fileevent to work 
        for pipes and serial ports. It does not work for Windows 95. 
        Check its web page for info on the latest development snapshots.
        The url for a version of Expect 5.25/Tcl 7.6 for Japanese Tcl 
        is mentioned above.
        The slavedrv code mentioned above is an attempt to port 
        a recent version of expect to recent version of Windows. 
        It may not have all the expect functionality.
        Version 5.44.1 of Expect, compatible with Tcl 8.5, 
        is also available from the SF.net CVS repository.
Updated: 8/2009
Contact: See the web sites 

Obtaining

The current maintenance of the package can be found at expect.sf.net , with access to the CVS available via sf.net's cvs repository.

Expect is part of the ActiveTcl Batteries Included distribution on Unix and as of 2005, the Windows version is available via ActiveTcl as well [L1 ].

Documentation

man pages
FAQ
BOOK Exploring Expect
the bible of the Expect world
official website
supplies sources and considerable history, background, and instruction. It does fail to mention, though, recognition of Expect as one of the 100 most important publications of NIST's first century. Note that the warning regarding expect 5.44 on that page is seriously out of date. The CVS 5.44 version linked to below is fine (and needed to build against Tcl 8.5).

External Resources

Expect External Resources
gives pointers to some wiki-external Expect material
Expect references of interest to Cameron Laird
some notes by CL

Tools

expect-lite
Written in expect, it is designed to directly map an interactive terminal session into an automation script

See Also

Expect FAQ
Expect Hints and Tips
Expect Examples
Expect Tutorials
Debugging Expect programs
Remote input-output with Expect
Secure expect
Expect for languages other than Tcl
Most programmers don't know what Expect can do for them
I am new to Expect
Event-oriented Expect
Expect vs. Tcl
Network programming with Expect
Expect and Tclkit
Expect and choice
It seems like Expect is not actively developed
overlay
handling of ANSI terminals using Expect
send special characters
Stubsification of Expect
An example wherein Expect controls a pager
"expect_out(buffer) has the content of the previous send"
Calc_Object
How Expect can capture the exit code from a remote command
Expect for Windows
Expect for languages other than Tcl
Checking your IMAP mail with Expect
How to access the result of a remote command in Expect
Many people who think they need Expect do not need Expect
Expect's frequently-made mistakes
How Expect sees function keys
How to send escape characters through Expect
Pipes vs Expect
expectk
expect in pure tcl
expect4j
provides a certain level of expect's functionality to the Jacl / Java programmer. Package author Justin Ryan reports on the TclJava mailing list : I've successfully ported a 100K tcl script based on expect to tcljava, without any changes, by just using expect4j.
How do I get the result of a remote command when I have to pass through a third host?
Don't Expect to sleep
How do I execute 'grep' on a remote machine and receive the result?

Articles

Writing a Tcl Extension in Only Three, no Four, no Five, no 7 Years
Don Libes' memoir on the joys of writing "simple" tools to get stuff done.
Expect Success , Cameron Laird 2003
is, for Kim Richert, "the best Expect article I've read". alternate
Expect Exceeds Expectations , Cameron Laird, 2002
a short introduction with minimal examples alternate
Expect: The Firefighter's Friend , Cameron Laird, 2002
alternate
Unknown Expect , Cameron Laird ,2004-02
seven little-known facts about expect that may help you use it more efficiently
Test-driven Development, Expect, and Systems Administration , Cameron Laird ,2003-12-15
Expect Tutorial
Using Expect to Configure Cisco Routers , Clay Lin ,1999
"... the entire task would take about a month for two people ... What used to take us a month now takes about an hour to finish completely and accurately."
Expect plays a crucial role in network management , Cameron Laird, 2007-07-31
Expect , Keith Waclena ,1994
a 5-minute tutorial
Automating Tasks with EXPECT ,Vinnie Saladino ,1998

Example Scripts

ftp-inband

Standard Sample Scripts

kibitz
mkpasswd
multixterm
passmass
unbuffer
xkibitz

(todo: fill out)

Misc

LV: Note that expect is also a command that is a part of the expect extension; see the expect source distribution for the doc.

Lars H: Also note that in the latter sense, expect is a powerful control structure (pretty much an automaton, is it not?).


srinadh 2009-10-08 10:41:28: I have an expect program. Sometimes it produces a core dump. How do I see core dump backtrace? Thanks

AMG: Use gdb.


susja 2010-11-12 14:05:18: I have a simple task: run autoexpect program to automate telnet. I was able to do it on my Solaris box but I am stuck on my Windows XP box. Here's what I did:

  1. downloaded expect-5.43.tar to my local drive, untar it and have Expect located at C:\.... . I tried to execute 'autoexpect' but it says: "'autoexpect' is not recognized as an internal or external command"
  2. I installed ActiveTcl 8.5.9. Successfully ran 'teacup install Expect'.
  3. Here I'm blocked: how now I could execute autoexpect program?

thanks in advance


bodangly 2011-12-13 18:47:18: The above question is old and the user likely found the answer however for reference, the PATH environment variable needs to have the location of the autoexpect program appended to it.