expect_expectl

(PECL expect >= 0.1.0)

expect_expectl β€” ΠžΠΆΠΈΠ΄Π°Π΅Ρ‚, ΠΏΠΎΠΊΠ° Π²Ρ‹Π²ΠΎΠ΄ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π½Π΅ совпадёт с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· шаблонов, Π»ΠΈΠ±ΠΎ ΠΏΠΎΠΊΠ° Π½Π΅ закончится максимальноС врСмя оТидания, Π»ΠΈΠ±ΠΎ вСрнётся EOF

ОписаниС

function expect_expectl(resource $expect, array $cases, array &$match = ?): int

ΠžΠΆΠΈΠ΄Π°Π΅Ρ‚, ΠΏΠΎΠΊΠ° Π²Ρ‹Π²ΠΎΠ΄ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π½Π΅ совпадёт с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· шаблонов, Π»ΠΈΠ±ΠΎ ΠΏΠΎΠΊΠ° Π½Π΅ закончится максимальноС врСмя оТидания, Π»ΠΈΠ±ΠΎ вСрнётся EOF.

Если Π·Π°Π΄Π°Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ match, Ρ‚ΠΎ ΠΎΠ½ заполняСтся с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ поиска. Бовпавшая строка Π±ΡƒΠ΄Π΅Ρ‚ сохранСна Π² match[0]. БовпавшиС подстроки (Π² зависимости ΠΎΡ‚ скобок) Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌ шаблонС Π±ΡƒΠ΄ΡƒΡ‚ сохранСны Π² match[1], match[2], Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ match[9] (ограничСния libexpect).

Бписок ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

expect
ΠŸΠΎΡ‚ΠΎΠΊ Expect, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ expect_popen().
cases

Массив ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. КаТдоС ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ прСдставляСт ΠΈΠ· сСбя индСксированный массив, описанный Π² этой Ρ‚Π°Π±Π»ΠΈΡ†Π΅:

Expect Case Array
ИндСкс Π’ΠΈΠΏ значСния ОписаниС ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
0 string шаблон, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ с ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ Π²Ρ‹Π²ΠΎΠ΄Π° Π΄Π° Β 
1 mixed Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Π΅Ρ€Π½Ρ‘Ρ‚ функция, Ссли совпадСниС Π½Π°ΠΉΠ΄Π΅Π½ΠΎ Π΄Π° Β 
2 integer Ρ‚ΠΈΠΏ шаблона: EXP_GLOB, EXP_EXACT ΠΈΠ»ΠΈ EXP_REGEXP Π½Π΅Ρ‚ EXP_GLOB

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ значСния

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, связанноС с шаблоном с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ½ΠΎ совпало.

Π’ случаС возникновСния ошибки функция Π²Π΅Ρ€Π½Ρ‘Ρ‚: EXP_EOF, EXP_TIMEOUT ΠΈΠ»ΠΈ EXP_FULLBUFFER

Бписок измСнСний

ВСрсия ОписаниС
PECL expect 0.2.1 Π”ΠΎ вСрсии 0.2.1, Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ match Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π»Π°ΡΡŒ строка, Π° Π½Π΅ массив ΡΠΎΠ²ΠΏΠ°Π²ΡˆΠΈΡ… строк.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #1 ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования expect_expectl()

<?php
// ΠšΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ Ρ„Π°ΠΉΠ»Ρ‹ с сСрвСра:
ini_set("expect.timeout", 30);

$stream = fopen("expect://scp user@remotehost:/var/log/messages /home/user/messages.txt", "r");

$cases = array(
// array(шаблон, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ² Π² случаС совпадСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅)
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; // ΠŸΡ€Π΅Ρ€Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ°ΠΊ switch Ρ‚Π°ΠΊ ΠΈ Ρ†ΠΈΠΊΠ» while
default:
die(
"ΠŸΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка!");
}
}

fclose($stream);
?>

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅

  • expect_popen() - ЗапускаСт ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ Bourne ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ для процСсса ΠΏΠΎΡ‚ΠΎΠΊ PTY
οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π΅Ρ‰Ρ‘ Π½Π΅ добавляли примСчания для страницы