(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
$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).
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:
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 |
Devuelve valores asociados con el patrón que coincida.
En caso de error esta función devuelve:
EXP_EOF
,
EXP_TIMEOUT
o
EXP_FULLBUFFER
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.
|
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);
?>