PDF de programación - tutorial de expect v0.6

Imágen de pdf tutorial de expect v0.6

tutorial de expect v0.6gráfica de visualizaciones

Publicado el 14 de Enero del 2017
1.023 visualizaciones desde el 14 de Enero del 2017
376,4 KB
23 paginas
Creado hace 12a (08/09/2011)
Next Previous Contents

Tutorial de expect, v0.6
Manuel de Vega Barreiro <[email protected]>

18 de marzo de 2002

Este es un rápido tutorial sobre expect, una herramienta para automatización de tareas interactivas.

1. Introducción a Expect

1.1 Porque surgió Expect?
1.2 Para que vale Expect?
1.3 Un apunte sobre Tcl.
1.4 Un primer ejemplo.

2. Instalación

2.1 Distribuciones Linux.
2.2 Solaris.
2.3 HP-UX.
2.4 Windows.

3. Lo basico de Expect

3.1 El comando Expect
3.2 Los patrones regulares
3.3 Controlando la presentacion
3.4 Paso de parametros a los programas Expect.
3.5 El comando Send
3.6 el comando spawn
3.7 el comando interact

4. Correccion de errores

4.1 Traza de la ejecucion.
4.2 Chequeo de la ejecucion y de los patrones de concordancia

5. Trucos

5.1 Ralentizacion en el envio de caracteres
5.2 Listados paginados
5.3 Comandos expect_after y expect_before

6. Opciones avanzadas y utilidades

6.1 autoexpect
6.2 expectk
6.3 kibitz y xkibitz

7. Acerca de Expect y de este tutorial

7.1 El Creador de Expect
7.2 Informacion complementaria.
7.3 Versiones de este tutorial.
7.4 Autor del tutorial
7.5 Derechos de autor

8. Anexo: ejemplos de programas Expect

8.1 ftp_1.exp
8.2 ftp_21.exp
8.3 ftp_22.exp
8.4 ftp_31.exp
8.5 ftp_32.exp
8.6 ftp_41.exp
8.7 ftp_51.exp
8.8 ftp_52.exp
8.9 ftp_61.exp
8.10 ftp_71.exp
8.11 telnet_gl.exp
8.12 telnet_re.exp

Next Previous Contents

Next Previous Contents

1. Introducción a Expect

1.1 Porque surgió Expect?

Los administradores y técnicos de sistemas se encuentran a menudo con la ingrata tarea de realizar aburridas tareas de
mantenimiento o prevención en los incontables aparatos que están bajo su responsabilidad.

A menudo es fácil realizar un fichero de comandos, bien directamente en el interprete de comandos Bourne (la shell de toda la vida),
bien de forma mas elaborada en Perl o Phyton, que nos permite automatizar este tipo de trabajos, y así dedicarnos a otras
actividades mas creativas.

Sin embargo a menudo nos encontramos con aplicaciones de configuración interactivas que no permiten este tipo de solución.
Seguramente habéis intentado inyectar comandos directamente desde un fichero desviando la entrada estándar, pero esta solución,
aparte de burda y poco elegante, no siempre da los resultados apetecidos:

No permite distintas acciones en función de las respuestas.
No contempla los casos de error o temporización.
Algunos programas se niegan a funcionar de esta manera.

Esto a veces nos obliga a repetir en numerosas ocasiones tediosas sesiones interactivas para configurar un encaminador, determinar
el estado de sistemas vitales para el funcionamiento de la red, conectarse a un determinado servidor, etc.
1.2 Para que vale Expect?

Si sufrís a menudo estas penalidades, y estáis buscando una solución sencilla a este tipo de problemas, Expect es la herramienta que
necesitáis. Seguramente algunos recordareis Crosstalk, un programa de comunicaciones que permitía automatizar conexiones serie, a
base de esperar ciertos mensajes por el puerto y responder de forma apropiada en función de lo recibido.

Pues bien Expect funciona de forma similar y además se puede aplicar a toda clase de aplicaciones interactivas con presentación de
tipo textual, incluyendo programas semigraficos basados en curses (lamentablemente los programas de tipo gráfico no tiene cabida en
Expect ;-( ).
1.3 Un apunte sobre Tcl.

Expect se apoya en el lenguaje de comandos extensible Tcl, y por tanto puede parecer necesario aprender otro lenguaje de
comandos mas. Tal vez seria la mejor forma de exprimir sus posibilidades, pero os puedo asegurar que yo lo uso sin saber apenas
nada de tcl (estoy contento con Perl y no me apetece cambiar).
1.4 Un primer ejemplo.

Veamos un sencillo ejemplo del uso de Expect (no, no es el Hola Mundo!). Pongamos que tenemos que conectarnos muy a menudo
con un determinado servidor de ficheros ftp y situarnos en un directorio concreto para después ejecutar una serie de comandos. A
mano tendríamos que teclear unos cuantos comandos, con expect la cosa quedaría en uno único.

El programa (ftp_1.exp) seria el siguiente:

#!/usr/bin/expect -f
#
#################################################################
#

# este parte se comentara mas adelante, de momento insertala al
# principio de cada fichero de comandos.
#
set force_conservative 1

;# set to 1 to force conservative mode even if
;# script wasn't run conservatively originally

if {$force_conservative} {

set send_slow {1 .001}
proc send {ignore arg} {

sleep .1
exp_send -s -- $arg

}

}
#################################################################
#
spawn ftp localhost
expect -exact "Name (localhost:root): "
send -- "ftp\r"
expect "Password:"
send -- "[email protected]\r"
expect -exact "ftp> "
send -- "binary\r"
expect -exact "ftp> "
send -- "hash\r"
expect -exact "ftp> "
send -- "cd pub/spain/gnome\r"
log_user 1
expect -exact "ftp> "
send -- "ls\r"
expext -exact "ftp> "
send -- quit\r"
expect eof
exit

Veamos el significado de los comandos mas importantes de este programa:

spawn... ejecuta la aplicación a controlar

expect... escucha la salida de la aplicación y espera la cadena indicada

send... envía a la aplicación la cadena indicada, '\r' corresponde a la pulsación de la tecla 'Retorno'

expect eof normalmente expect recibe un eof al terminar el comando lanzado con spawn. exit termina la ejecucion del programa
expect

El programa lanza en primer lugar el comando 'ftp' y queda a la espera de la peticion de nombre de usuario. Una vez que se recibe se
envia 'ftp'. Se queda ahora a la espera de la peticion de password, y se envia esta al recibirla. Una vez que llega el indicador de 'ftp',
se envia los comandos deseados de forma succesiva.

Para terminar se ejecuta el comando 'exit' termina el programa expect

Next Previous Contents

Next Previous Contents

2. Instalación

evidentemente si queremos utilizar Expect, el primer paso es instalarlo en nuestro sistema.
2.1 Distribuciones Linux.

Si trabajamos con alguna distribución de Linux, seguramente tengamos ya Expect instalado y listo para su uso.

Podemos comprobarlo usando las herramientas de la distribucción. Por ejemplo si se utiliza Red Hat:

rpm -qa | grep expect

En caso contrario se debe instalar los paquetes tcl y expect:

cd /mnt/cdrom
rpm -ivh tcl*.rpm
rpm -ivh expect*.rpm

2.2 Solaris.

La forma mas sencilla de instalar expect en Solaris es copiar de la red los paquetes tcl y expect en formato pkg. Estos paquetes se
pueden conseguir para distintas versiones de Solaris en:

http://sunfreeware.com

Al descargar los ficheros comprimidos con gzip, los navegadores quitan la extension .gz del nombre del fichero, pero no siempre lo
descomprimen.

Una vez que tenemos los pquetes necesarios, procedemos a instalarlos usando los siguinetes comandos:

gzip -d tcl-8.0.3-sol7-sparc-local.gz
pkgadd -d tcl-8.0.3-sol7-sparc-local
gzip -d expect-5.28-sol7-sparc-local.gz
pkgadd -d expect-5.28-sol7-sparc-local

2.3 HP-UX.

La forma mas sencilla de instalar expect en HP-UX es copiar de la red los paquetes tcl y expect en formato utilizado por Software
Distributor (SD). Estos paquetes se pueden conseguir para distintas versiones de HP-UX en:

http://hpux.cict.fr/

Al descargar los ficheros comprimidos con gzip, los navegadores quitan la extension .gz del nombre del fichero, pero no siempre lo
descomprimen.

Una vez que tenemos los paquetes necesarios, procedemos a instalarlos usando los siguientes comandos:

gzip -d tcl-8.1.1-sd-11.00.depot.gz
swinstall -s tcl-8.1.1-sd-11.00.depot tcl
gzip -d expect-5.31-sd-11.00.depot.gz
swinstall -s expect-5.31-sd-11.00.depot

2.4 Windows.

Parece que Expect tambien se puede usar con Windows, eso si como algunas limitaciones.

Podeis encontrar información sobre somo instalarlo y usarlo en: http://bmrc.berkeley.edu/people/chaffee/tcltk.html

Next Previous Contents

Next Previous Contents

3. Lo basico de Expect

A continuacion iremos ampliando las posibilidades del ejemplo presentado en el primer capitulo, al tiempo que aprendemos mas
acerca de la sintaxis de los comandos de expect.
3.1 El comando Expect

El programa anterior funcionara siempre que la conexion al servidor de ftp sea correcta. Pero que pasa por ejemplo si esta falla
(ftp_21)?

Cuando la conexion falla, ftp presentara un determinado mensaje de error. El comando expect puede gestionar distintos mensajes de
una forma similar a una sentencia case (ftp_31).

expect -exact {

"connection refused" {puts "Conexion denegada\n";exit}
"Host name lookup failure" {puts "servidor desconocido\n";exit}
"Name"

}

Y si no se recibe ninguno de estas cadenas, ya sea la esperada o cualquiera de los errores conocidos (ftp_22)?.

Para este caso tenemos la opcion generica 'timeout'. Si expect no recibe ninguna de las cadenas esperadas en el un tiempo
determinado (10sg por defecto), se ejecuta lo indicado en la opcion 'timeout' (ftp_32).

expect -exact {

timeout {puts "El programa ha temporizado\n";exit}
"connection refused" {puts "Conexion denegada\n";exit}
"Host name lookup failure" {puts "servidor desconocido\n";exit}
"Name"

}

Por supuesto el valor de la temporizacion se puede variar en cualquier momento a lo largo del programa, e incluso anularse si se la
asigna el valor -1.

set timeout 15
set timeout -1

3.2 Los patrones regulares

Otra cosa que salta a la vista en los ejemplos anteriores es que escribir las cadenas que espera el comando expect, puede llegar a ser
una tarea ardua y tediosa. Para ayudarnos en esta tarea se puede recurrir a los patrones regulares, que nos permitiran contruir estas
cadenas mas facilmente usando caracteres comodin. Expect permite usar dos sintaxis para contruir los patrones regulares:

Glob, '-gl'
Regexp, '-re'

El primero es de sintaxis muy sencilla, pero menos flexible. El segundo es utiliza la misma sintaxis que el comando grep.

explicacion de los tipos de patrones (solo tabla).

Con los comodines tambien podemos solventar el problema que plantean ap
  • Links de descarga
http://lwp-l.com/pdf364

Comentarios de: tutorial de expect v0.6 (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad