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
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 |
|---|---|
| 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
Example #1 Ejemplo de expect_expectl()
<?php
// Copia ficheros del host remoto:
ini_set ("expect.timeout", 30);
$stream = fopen ("expect://scp user@remotehost:/var/log/messages /home/user/messages.txt", "r");
$cases = array (
array (0 => "password:", 1 => PASSWORD),
array (0 => "yes/no)?", 1 => YESNO)
);
while (true) {
switch (expect_expectl ($stream, $cases))
{
case PASSWORD:
fwrite ($stream, "password\n");
break;
case YESNO:
fwrite ($stream, "yes\n");
break;
case EXP_TIMEOUT:
case EXP_EOF:
break 2;
default:
die ("Error has occurred!\n");
}
}
fclose ($stream);
?>
