CakeFest 2024: The Official CakePHP Conference

expect_expectl

(PECL expect >= 0.1.0)

expect_expectlОжидает, пока вывод потока не совпадёт с одним из шаблонов, либо пока не закончится максимальное время ожидания, либо вернётся EOF

Описание

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

add a note

User Contributed Notes

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