# expect_expectl

(PECL expect >= 0.1.0)

expect_expectl — Espera a que la salida de un proceso coincida con un patrón, se supere un determinado periodo de tiempo, o se alcance un EOF

### Descripción

expect_expectl(resource `$expect`, array `$cases`, array `&$match` = ?): int

Espera a que la salida de un proceso coincida con un patrón, se supere un determinado periodo de tiempo, o se alcance un EOF.

Si se proporciona el parámetro `match`, se le asignará el resultado de la búsqueda. La cadena que coincide se encuentra en `match[0]`. Las subcadenas que coincidan (de acuerdo a los paréntesis) con el patrón original se encuentran en `match[1]`, `match[2]`, y así hasta `match[9]` (límite establecido por libexpect).

### Parámetros

`expect`

  Flujo de Expect, abierto anteriormente con expect_popen().

`cases`

  Matriz con casos de expect. Cada caso será un array indexado, tal como se describe en la siguiente tabla:

  Array de Caso de Expect
  Clave de índice | Tipo de valor | Descripción | Es Obligatorio | Valor por omisión
  --- | --- | --- | --- | ---
  0 | string | patrón, que buscará coincidencias en la salida del flujo | sí |
  1 | mixto | valor, que devolverá esta función, si coincidiera el patrón | sí |
  2 | integer | tipo de patrón, de entre: `EXP_GLOB`, `EXP_EXACT` o `EXP_REGEXP` | no | `EXP_GLOB`

### Valores devueltos

Devuelve valores asociados con el patrón que coincida.

En caso de error esta función devuelve: `EXP_EOF`, `EXP_TIMEOUT` o `EXP_FULLBUFFER`

### Historial de cambios

Versión | Descripción
--- | ---
PECL expect 0.2.1 | Antes de la versión 0.2.1, en el parámetro `match` se devolvía el string que coincidiera, no un array de substrings coincidentes.

### Ejemplos

Ejemplo #1 Ejemplo de expect_expectl()

`<?php
// Copias de los archivos de host remoto:
ini_set("expect.timeout", 30);
$stream = fopen("expect://scp user@remotehost:/var/log/messages /home/user/messages.txt", "r");
$cases = array(
// array(patrón, valor que se devolverá si el patrón es encontrado)
array("password:", "asked for password"),
array("yes/no)?", "asked for yes/no")
);
while (true) {
switch (expect_expectl($stream, $cases)) {
case "asked for password":
fwrite($stream, "my password\n");
break;
case "asked for yes/no":
fwrite($stream, "yes\n");
break;
case EXP_TIMEOUT:
case EXP_EOF:
break 2; // break tanto la sentencia switch y el bucle while
default:
die("Error has occurred!");
}
}
fclose($stream);
?>`

### Ver también

- expect_popen() - Ejecuta comandos por la shell Bourne, y abre el flujo PTY al proceso