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