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

# 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

function 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:", "pidió la contraseña"),
        array("yes/no)?",  "pidió sí/no")
    );

    while (true) {
        switch (expect_expectl($stream, $cases)) {
            case "pidió la contraseña":
                fwrite($stream, "mi_contraseña\n");
                break;
            case "pidió sí/no":
                fwrite($stream, "yes\n");
                break;
            case EXP_TIMEOUT:
            case EXP_EOF:
                break 2; // sale tanto del switch como del bucle while
            default:
                die("¡Ha ocurrido un error!");
        }
    }

    fclose($stream);
    ?>

### Ver también

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

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open