Expect - це

базові поняття

Expect підтримує механізм регулярних виразів і основні можливості програмування, що дозволяють простим скриптів ефективно управляти такими програмами як telnet. ftp. і ssh. що не володіють вбудованим скрипт-мовою, макросами, або іншими механізмами програмування.

Ефективний при роботі з мережевим обладнанням - масове оновлення конфігурацій керованого (активного) мережевого обладнання з диференційованим виконанням команд (в залежності від вендора, версії програмного забезпечення якого типу (світч, роутер, etc.))

Простий приклад скрипта, який автоматизує сесію telnet:

Ще один скрипт, який в якості прикладу автоматизує ftp-сесію:

  • spawn - виклик програми
  • expect - очікування виведення запущеною програмою рядка
  • send - передача даних або команд в викликану програму
  • close - завершення сценарію

Використання

Expect виступає в якості клею для склеювання існуючих утиліт. Головна ідея полягає в тому, щоб використовувати вже наявні інструменти, а не вирішувати проблему всередині Expect.

Одним з головних застосувань Expect є комерційні додатки. Багато з цих додатків надають інтерфейс командного рядка, але, як правило, його недостатньо для написання скриптів. Вони створені для забезпечення користувача засобами адміністрування, але виробники часто не витрачають грошей на створення повноцінного скриптового мови.

Скрипт Expect може запустити командний інтерпретатор, прочитати змінні оточення, виконати набір команд Unix для отримання інформації, і після цього ввести в інтерфейс командного рядка продукту отриману інформацію для досягнення мети, поставленої користувачем. Після пошуку інформації в командному рядку продукту, скрипт може прийняти інтелектуальне рішення про те, яку дію зробити, і т. П.

Кожен раз, коли Expect-операція виконана, результати поміщаються в локальній змінній $ expect_out. Це дозволяє скрипту одночасно збирати інформацію для передачі користувачу, і приймати логічні рішення про подальші дії в залежності від обставин.

Expect широко використовується як інструмент створення наборів для тестування утиліт, програм, вбудованих систем. DejaGnu це комплект для тестування написаний з застосуванням Expect. Він використовувався для тестування компілятора gcc і добре підходить для тестування на віддалених комп'ютерах (наприклад для розробки вбудованих систем).

Сильні сторони

Expect може запускатися через рівні проміжки часу за допомогою cron для інкапсуляції завдань системного адміністрування. Мета такого режиму використання в тому, щоб задіяти Expect для вирішення завдань системного адміністрування за допомогою підручних засобів на цьому ж комп'ютері. Ніяких додаткових інструментів не потрібно, для того, щоб навчитися. Якщо програміст вже знає Tcl. то перехід на Expect виявиться легким і відносно простим. Оскільки програмні структури і синтаксис однакові, але додадуться додаткові можливості.

На підприємствах є багато варіантів використання Expect для вирішення внутрішніх завдань. Він широко використовується компаніями, такими як Silicon Graphics. IBM. Hewlett-Packard. Sun Microsystems. Xerox. Amdahl, Tektronix. ATT. Computervision і Всесвітній банк для запуску внутрішніх завдань автоматичного тестування в проектах розробки, передачі файлів, адміністрування облікових записів і тестування мережі.

Expect портовано в мови Python і Perl в вигляді різних додаткових модулів. Підмножина команд Expect-а перенесено в java і доступно в SwitchTermJ (java-based Terminal Emulator). Реалізація процедур в цих модулях це в основному інтерпретація оригінальної версії з еквівалентної функціональністю. Одного разу зрозумівши концепцію, ви, при необхідності, можете перенести її на інші мови.

Слабкі сторони

Expect успадкував синтаксис Tcl. який не схожий на інші скриптові мови, такі як bash. csh. і Perl. Доводиться постійно пам'ятати, коли перед змінної повинен стояти знак «$», а коли ні. Є версії Expect доступні для Perl і Python для тих, хто знайомий з їх синтаксисом.

Інше обмеження полягає в складності портирования Expect-скриптів між платформами. Наприклад, скрипт Expect, який написаний для використання декількох Unix утиліт, може не працювати, якщо буде запущено під Windows. По можливості, програміст повинен знайти додаток, яке має інтерфейс командного рядка. який забезпечує ту ж саму інформацію, а це найімовірніше потребують зміни команди send / expect, які можуть бути головною частиною скрипта. Ця проблема не виникає, якщо Ви використовуєте tcl. perl або python з їх posix інтерфейсами для отримання доступу до файлів (відкриття / закриття) і так далі, а також коли ви використовуєте стандартні posix утиліти (telnet. ftp і т. д.) для віддаленого взаємодії.

Отже, Expect автоматизує інструменти, які мають інтерфейс командного рядка. але не утиліти, які мають графічний інтерфейс користувача. У той час як Windows надає безліч різних утиліт, багато з яких мають тільки графічний інтерфейс і залишаються поза зоною застосування Expect-а. Графічні додатки в Windows можуть бути автоматизовані за допомогою утиліт подібних AutoIt.

зовнішні посилання