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