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
, array $cases
[, array &$match
] )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_EXACToEXP_REGEXPno 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
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);
?>