expect_expectl

(PECL expect >= 0.1.0)

expect_expectlEspera 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  
1 mixto valor, que devolverá esta función, si coincidiera el patrón  
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

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

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top