Presentation is loading. Please wait.

Presentation is loading. Please wait.

WebTech Varna 2007 Expect – the unexpected Marian Marinov – System Architect - Siteground.com.

Similar presentations


Presentation on theme: "WebTech Varna 2007 Expect – the unexpected Marian Marinov – System Architect - Siteground.com."— Presentation transcript:

1 WebTech Varna 2007 Expect – the unexpected Marian Marinov – mm@yuhu.biz System Architect - Siteground.com

2 2 Agenda ➢ What is Expect and where it can help ➢ Implementations ➢ UNIX tool expect ➢ Python pexpect ➢ Perl Expect ➢ PHP expect Marian Marinov - mm@yuhu.bizWebTech Varna 2007 1/30

3 3 What is Expect ➢ Automating Interactive Applications ➢ Unique System Administrators tool ➢ Just Another TCL extension ➢ Great automated application tester Where to use it: ➢ passwd automations ➢ automation of ncurses based application ➢ automated patch management Marian Marinov - mm@yuhu.bizWebTech Varna 2007 2/30

4 4 UNIX Expect application Requirements:tcl & expect Don Libes - http://expect.nist.gov/ hackman@gamelon:~$ expect expect1.1> send "hello world" hello worldexpect1.2> exit hackman@gamelon:~$ expect expect1.1> send "hello world\n"; hello world expect1.2> exit Marian Marinov - mm@yuhu.bizWebTech Varna 2007 3/30

5 5 UNIX Expect application hackman@gamelon:~$ cat speak.exp #!./expect -f send "hello world\n" hackman@gamelon:~$./speak.exp hello world Marian Marinov - mm@yuhu.bizWebTech Varna 2007 4/30

6 6 UNIX Expect application send – sending string to the command send_user – sending string to STDOUT send_log – sending string to text log file set timeout -1|0|60 – maximum wait for command input stty -echo – turn off KBD echo spawn – start a program interact – returns the control of the started command back to user Marian Marinov - mm@yuhu.bizWebTech Varna 2007 5/30

7 7 UNIX Expect application match_max 100000 - max buffer size log_user 0|1 – enable/disable logging to STDOUT log_file filename – file where to store the script output as addition to STDOUT expect -exact – match exact string expect -re – match regular expression expect eof – wait the command to finish Marian Marinov - mm@yuhu.bizWebTech Varna 2007 6/30

8 8 UNIX Expect application expect { # nestead expectes -re "" { } -exact "" { } -re "" { } Marian Marinov - mm@yuhu.bizWebTech Varna 2007 7/30

9 9 UNIX Expect application Get some user input: stty -echo expect_user -re "(.*)\n" set password $expect_out(1,string) send_user "\n" Marian Marinov - mm@yuhu.bizWebTech Varna 2007 8/30

10 10 UNIX Expect application Show some examples :) Marian Marinov - mm@yuhu.bizWebTech Varna 2007 9/30

11 11 UNIX Expect application I'm stupid and I didn't understood anything Can I still use Expect? YES autoexpect Marian Marinov - mm@yuhu.bizWebTech Varna 2007 10/30

12 12 UNIX Expect application autoexpect ftp ftp.example.com autoexpect -f ftp.exp ftp ftp.example.com -c – conservative mode -p – prompt mode Marian Marinov - mm@yuhu.bizWebTech Varna 2007 11/30

13 13 Python pexpect package URL: http://pexpect.sourceforge.net/ Requirements: python2.4 & pty package Installation: 1. download pexpect-2.1.tar.gz 2. tar zxf pexpect-2.1.tar.gz 3. cd pexpect-2.1 4. python setup.py install Marian Marinov - mm@yuhu.bizWebTech Varna 2007 12/30

14 14 Python pexpect package import pexpect child = pexpect.spawn ('ftp ftp.openbsd.org') child.expect ('Name.*: ') child.sendline ('anonymous') child.expect ('Password:') child.sendline ('test@example.com') child.expect ('ftp> ') child.sendline ('cd pub') child.expect('ftp> ') child.sendline ('get ls-lR.gz') child.expect('ftp> ') child.sendline ('bye') Marian Marinov - mm@yuhu.bizWebTech Varna 2007 13/30

15 15 Python pexpect package Regular expression problems: matching the end of the line can be tricky :) The $ pattern for end of line match is useless. child.expect ('\w+\r\n') - matching word at the end of the line minimal match(instead of the standard greedy): child.expect ('.+') - match always one char child.expect ('.*') - match always zero or one char Marian Marinov - mm@yuhu.bizWebTech Varna 2007 14/30

16 16 Expect for Perl Packages: Expect Expect::Simple Installation: perl -MCPAN -e 'install Expect' perl -MCPAN -e 'install Expect::Simple' Download and compile (http://search.cpan.org) Marian Marinov - mm@yuhu.bizWebTech Varna 2007 15/30

17 17 Expect for Perl Expect->new(); $object->spawn(@command); $object->debug($debug_level); $object->exp_internal(0 | 1); $object->raw_pty(0 | 1); Marian Marinov - mm@yuhu.bizWebTech Varna 2007 16/30

18 18 Expect for Perl $object->match(); $object->matchlist(); $object->match_number(); $object->error(); $object->command(); $object->exitstatus(); $object->do_soft_close(); $object->restart_timeout_upon_receive(0 | 1); Marian Marinov - mm@yuhu.bizWebTech Varna 2007 17/30

19 19 Expect for Perl $object->log_group(0 | 1 | undef); $object->log_user(0 | 1 | undef); $object->log_file("filename" | $filehandle | \&coderef | undef); $object->match_max($max_buffersize or undef); $object->pid(); $object->send_slow($string_to_send); $object->send_slow($delay, @strings_to_send); Marian Marinov - mm@yuhu.bizWebTech Varna 2007 18/30

20 20 Expect in PHP Requirements: libexpect >= 5.43.0 PHP >= 4.3.0 PECL Installation: pear install expect Marian Marinov - mm@yuhu.bizWebTech Varna 2007 19/30

21 21 Expect in PHP ini_set ("expect.loguser", "Off"); $stream = fopen ("expect://ssh root@remotehost uptime", "r"); $cases = array ( array (0 => "password:", 1 => PASSWORD) ); Marian Marinov - mm@yuhu.bizWebTech Varna 2007 20/30

22 22 Expect in PHP switch (expect_expectl ($stream, $cases)) { case PASSWORD: fwrite ($stream, "password\n"); break; default: die ("Error was occurred while connecting to the remote host!\n"); } while ($line = fgets ($stream)) { print $line; } fclose ($stream); Marian Marinov - mm@yuhu.bizWebTech Varna 2007 21/30


Download ppt "WebTech Varna 2007 Expect – the unexpected Marian Marinov – System Architect - Siteground.com."

Similar presentations


Ads by Google