Установка/Использование pexpect и python в Unix/Linux

Установка/Использование pexpect и python в Unix/Linux

Expect — инструмент для автоматизации и тестирования в ОС Unix, написанный Don Libes как расширение к скрипт-языку Tcl, для интерактивных приложений таких, как telnet, ftp, passwd, fsck, rlogin, tip, ssh, и других.

pexpect — это модуль Python для spawning-а дочерних приложений; контроль над ними; реагирования на ожидаемые закономерности. Pexpect работает так, как ожидал Дон Либес. Pexpect позволяет вашему скрипту порождать дочернее приложение и контролировать его, как если бы человек вводил команды.

Установка pexpect в Unix/Linux

Я приведу несколкьо примеров по установке данного ПО.

-=== СПОСОБ 1 — Использование tar рахива ===-

Скачиваем pexpect архив:

# cd /usr/local/src && wget https://netcologne.dl.sourceforge.net/project/pexpect/pexpect/Release%202.3/pexpect-2.3.tar.gz

Распакуем его,и, перейдем в папку:

# tar zxf pexpect-current.tgz && cd pexpect-current

Запускаем установку:

# python setup.py install

Можно юзать!

-=== СПОСОБ 2 — Использования установщика PIP ===-

Для начала, установим PIP:

Установка pip/setuptools/wheel в Unix/Linux

После чего, выполняем:

# pip install pexpect

Или:

# pip3 install pexpect

Установка закончена, используйте. Примеры покажу ниже.

Использование pexpect и python в Unix/Linux

Давайте рассмотрим примеры. Создадим питон-скрипт:

$ cat python_pexpect.py

Вот его содержание:

# This connects to the openbsd ftp site and
# downloads the recursive directory listing.
import pexpect
child = pexpect.spawn ('ftp ftp.linux-notes.org')
child.expect ('Name .*: ')
child.sendline ('anonymous')
child.expect ('Password:')
child.sendline ('admin@linux-notes.org')
child.expect ('ftp> ')
child.sendline ('cd pub')
child.expect('ftp> ')
child.sendline ('get some_file.gz')
child.expect('ftp> ')
child.sendline ('bye')

Простой скрипт, но с использованием pexpect — выглядит внушительно!

Вот еще другой скрипт:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import pexpect

switch_ip = "10.0.0.1"
switch_un = "user"
switch_pw = "s3cr3t"
switch_enable_pw = "m0r3s3cr3t"
port = "Gi2/0/2"
vlan = 300

try:
  try:
    child = pexpect.spawn('ssh %s@%s' % (switch_un, switch_ip))
    if verbose:
        child.logfile = sys.stdout
    child.timeout = 4
    child.expect('Password:')
  except pexpect.TIMEOUT:
    raise OurException("Couldn't log on to the switch")

  child.sendline(switch_pw)
  child.expect('>')
  child.sendline('terminal length 0')
  child.expect('>')
  child.sendline('enable')
  child.expect('Password:')
  child.sendline(switch_enable_pw)
  child.expect('#')
  child.sendline('conf t')
  child.expect('\(config\)#')
  child.sendline('interface %s' % (port))
  o = child.expect(['\(config-if\)#', '% Invalid'])
  if o != 0:
      raise Exception("Unknown switch port '%s'" % (port))
  child.sendline('switchport access vlan %s' % (vlan))
  child.expect('\(config-if\)#')
  child.sendline('no shutdown')
  child.expect('#')
  child.sendline('end')
  child.expect('#')
  child.sendline('wr mem')
  child.expect('[OK]')
  child.expect('#')
  child.sendline('quit')
except (pexpect.EOF, pexpect.TIMEOUT), e:
    error("Error while trying to move the vlan on the switch.")
    raise

Как-то так.

У меня на этом все, статья «Установка/Использование pexpect и python в Unix/Linux» завершена.

This entry was posted in Без рубрики. Bookmark the permalink.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *