Установка/Использование 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.

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

Ваш адрес email не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.