See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Expect — Википедия

Expect

Материал из Википедии — свободной энциклопедии

Expect — это инструмент для автоматизации и тестирования в ОС Unix, написанный Don Libes как расширение к скрипт-языку Tcl, для интерактивных приложений таких, как telnet, ftp, passwd, fsck, rlogin, tip, ssh, и другие. С помощью Tk интерактивные приложения могут быть использованы с графическим интерфейсом (GUI) X11.

Содержание

[править] Базовые понятия

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

[править] Примеры

Простой пример скрипта, который автоматизирует сессию telnet:

  ######################################################################################
  #$remote_server - сервер, к которому осуществляется доступ                           #
  #$my_user_id    - имя пользователя на сервере                                        #
  #$my_password   - пароль пользователя на сервере                                     #
  #$my_command    - команда, которая будет запущена на сервере                         #
  #                                                                                    #
  # Предполагается, что $remote_server, $my_user_id, $my_password, и $my_command       #
  # были инициализированы в скрипте ранее.                                             #
  ######################################################################################
  # Открываем telnet сессию на удаленном сервере, и ждем запроса имени пользователя.
  spawn telnet $remote_server
  expect "username:"
# Посылаем имя пользователя и ждем запроса пароля. send "$my_user_id\r" expect "password:"
# Посылаем пароль и ждем приглашения ввода командного интерпретатора. send "$my_password\r" expect "%"
# Посылаем команду, и ждем следующего приглашения ввода командного интерпретатора. send "$my_command\r" expect "%"
# Запоминваем результат в переменной. Он может быть отображен, или записан на диск. set results $expect_out(buffer)
# Завершаем сессию telnet, и ждем символа конца строки (eof). send "exit\r" expect eof

Ещё один скрипт, который в качестве примера автоматизирует ftp сессию:

  # Открыть ftp сессию на удаленном сервере, и ждать запроса имени пользователя.
  spawn ftp $remote_server
  expect "username:"
# Послать имя пользователя, и ждать приглашения ввода пароля. send "$my_user_id\r" expect "password:"
# Послать пароль, и ждать приглашения ввода ftp. send "$my_password\r" expect "ftp>"
# Переключиться в бинарный режим, и снова ждать приглашения ввода ftp. send "bin\r" expect "ftp>"
# Выключить приглашение ввода. send "prompt\r" expect "ftp>"
# ПОлучиь все файлы send "mget *\r" expect "ftp>"
# Закончить ftp сессию и ждать спецсимвол конца файла (eof). send "bye\r" expect eof

[править] Использование

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

Одним из главных применений Expect являются коммерческие приложения. Многие из этих приложений предоставляют интерфейс командной строки, но, как правило, его недостаточно для написания скриптов. Они созданы для обеспечения пользователя средствами администрирования, но производители зачастую не тратят денег на создание полноценного скрипт-языка.

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

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

Expect широко используется как инструмент создания наборов для тестирования утилит, программ, встроенных систем. DejaGnu это комплект для тестирования написанный с применением Expect. Он использовался для тестирования gcc и хорошо подходит для тестирования удалённых целей. таких, как разработка встроенных систем.

[править] Мнения

[править] Сильные стороны

Expect может запускаться через равные промежутки времени с помощью cron для инкапсуляции задач системного администрирования. Цель такого режима использования в том, чтобы задействовать Expect для решения задач системного администрирования с помощью средств находящихся на этом же компьютере. Никаких дополнительных инструментов не нужно, для того, чтобы научиться. Если программист уже знает Tcl, то переход на Expect окажется лёгким и относительно простым. Поскольку программные структуры и синтаксис одинаковы, но добавятся дополнительные возможности.

На предприятиях имеется много вариантов использования Expect для решения внутренних задач. Он широко используется компаниями, такими как Silicon Graphics, IBM, HP, Sun, Xerox, Amdahl, Tektronix, AT&T, ComputerVision и World Bank для запуска внутренних задач автоматического тестирования в проектах разработки, передачи файлов, администрирования учётных записей и тестирования сети.

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

[править] Слабые стороны

Expect унаследовал синтаксис Tcl, который не похож на другие скрипт-языки. В сравнении с такими языками как bash, csh, и Perl, Expect имеет другие обороты. Приходится постоянно держать в памяти тот момент, когда перед переменной должен стоять знак "$", а когда нет. Есть версии Expect доступные для Perl и Python для тех, кто знаком с их синтаксисом.

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

Итак, Expect автоматизирует инструменты, которые имеют интерфейс командной строки, но не утилиты, которые имеют GUI. В то время как Windows предоставляет множество различных утилит, многие из которых имеют только GUI и остаются вне зоны применения Expect-а. Графические приложения в Windows могут быть автоматизированы с помощью утилит подобных AutoIt.

[править] Ссылки

[править] Внешние ссылки

На других языках


aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -