PHP Conference Nagoya 2025

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
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:", "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