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