PERL: БИБЛИОТЕКА ПРОГРАММИСТА



              

PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 511


# Произошла ошибка;   вероятно,  работа программы нарушена

# Послать программе "Hello, world" и перевод строки
print $command "Hello, world\n";

#  Если программа завершается сама, предоставить ей такую возможность
$command->soft_close();

#  Если программа должна быть закрыта извне, завершить ее
$command->hard_close();

Комментарий

Для работы модуля Expect необходимы два других модуля с CPAN: IO::Pty и IO:Stty. Expect создает псевдотерминал для взаимодействия с программами, ко­торые непременно должны общаться с драйвером терминального устройства. Та­кая возможность часто используется для изменения пароля в программе passwd. К числу других программ, для которых также необходим настоящий терминал, принадлежат telnet (модуль Net::Telnet из рецепта 18.6 более функционален и об­ладает улучшенной переносимостью) и ftp.

Запустите нужную программу с помощью Expect->spawn, передайте ей имя про­граммы и аргументы — либо в виде одной строки, либо в виде списка. Expect за­пускает программу и возвращает либо представляющий ее объект, либо undef, если запустить программу не удалось.

Для ожидания вывода программой конкретной строки применяется метод expect. Его первый аргумент равен либо числу секунд, в течение которых ожида­ется вывод строки, либо undef для бесконечного ожидания. Ожидаемая строка является вторым аргументом expect. Чтобы определить ее с помощью регуляр­ного выражения, передайте в качестве второго аргумента строку "-re", а третье­го — строку с шаблоном. Затем можно передать другие строки или шаблоны:

$which = $command->expect(30, "invalid", "succes", "error", "boom"); if ($which) {

# Найдена одна из указанных строк }

В скалярном контексте expect возвращает номер аргумента, для которого про­изошло совпадение. В предыдущем примере expect вернет 1 при выдаче програм­мой строки "invalid", 2 - при выводе "succes" и т. д. Если ни одна строка или шаблон не совпали, expect возвращает false.




Содержание  Назад  Вперед