Pexpect自動インタラクティブシステム

4833 ワード

PexpectはDon LibesのExpect言語のPython実装であり、サブルーチンを起動し、正規表現を使用してプログラム出力に特定の応答を行い、それによって自動的に対話するPythonモジュールを実現する.Pexpectの使用範囲は広く、ssh、ftp、telnetなどのプログラムとの自動インタラクションを実現するために使用することができる.ソフトウェアインストールパッケージを自動的にコピーし、異なるマシンで自動的にインストールすることができます.ソフトウェアテストでコマンドラインと対話する自動化を実現するためにも使用できます.
一、Pexpectのインストール
1、pythonパッケージマネージャのインストール
[root@plinuxos ~]# yum install -y python34-setuptools                                      
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.btte.net
 * epel: mirrors.ustc.edu.cn
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
......
Installed:
  python34-setuptools.noarch 0:19.2-3.el7

Dependency Installed:
  python34.x86_64 0:3.4.5-4.el7           python34-libs.x86_64 0:3.4.5-4.el7

Complete!

2、pexpectソフトウェアのインストール
[root@plinuxos ~]# easy_install-3.4 pexpect
Searching for pexpect
Reading https://pypi.python.org/simple/pexpect/
Best match: pexpect 4.2.1
Downloading https://pypi.python.org/packages/e8/13/d0b0599099d6cd23663043a2a0bb7c61e58c6ba359b2656e6fb000ef5b98/pexpect-4.2.1.tar.gz#md5=3694410001a99dff83f0b500a1ca1c95
Processing pexpect-4.2.1.tar.gz
......
Installed /usr/lib/python3.4/site-packages/ptyprocess-0.5.2-py3.4.egg
Finished processing dependencies for pexpect

3、インストール効果を検証する
[root@plinuxos ~]# python3.4
Python 3.4.5 (default, May 29 2017, 15:17:55)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pexpect
>>> dir(pexpect)
['EOF', 'ExceptionPexpect', 'Expecter', 'PY3', 'TIMEOUT', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__revision__', '__spec__', '__version__', 'exceptions', 'expect', 'is_executable_file', 'pty_spawn', 'run', 'runu', 'searcher_re', 'searcher_string', 'spawn', 'spawnbase', 'spawnu', 'split_command_line', 'sys', 'utils', 'which']
>>> print(pexpect.run('w'))
b' 14:27:41 up 67 days,  1:12,  2 users,  load average: 0.00, 0.01, 0.05\r
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT\r
root     tty1                      23Sep17 38days  0.02s  0.02s -bash\r
root     pts/0    103.20.249.250   13:55    5.00s  0.14s  0.09s python3.4\r
'

二、pexpectリモート管理設備の使用
1、スクリプトの作成
[root@plinuxos tmp]# cat pexpectest.py
import pexpect
import sys
ssh=pexpect.spawn('/usr/bin/ssh [email protected].***.***')
ssh.expect('password:')
ssh.sendline("123456")
ssh.expect('#')
ssh.sendline("echo 'this is a test'>> /tmp/1.txt")
print(ssh.before)           # Print the result of the ls command. 
ssh.interact()              # Give control of the ssh to the user.

2、実行スクリプト
[root@plinuxos tmp]# python3.4 pexpectest.py
b' \r
  ' #####################################################################   #                              Notice                                #   #                                                                    #   #  1. Please DO NOT upgrade the kernel, as the kernel upgrade would  #   #   damage the original operating system.                            #   #                                                                    #   #  2. Please create unique passwords that use a combination of words,#   #   numbers, symbols, and both upper-case and lower-case letters.    #   #   Avoid using simple adjacent keyboard combinations such as        #   #   "Qwert!234","Qaz2wsx",etc.                                       #   #                                                                    #   #  3. Unless necessary, please DO NOT open or use high-risk ports,   #   #   such as Telnet-23, FTP-20/21, NTP-123(UDP), RDP-3389,            #   #   SSH/SFTP-22, Mysql-3306, SQL-1433,etc.                           #   #                                                                    #   #                                                                    #   #                     Any questions please contact 4000-955-988      #   ###################################################################### [root@pos ~]# echo 'this is a test'>> /tmp/1.txt [root@pos ~]# ## [root@pos ~]# cat /tmp/1.txt this is a test [root@pos ~]# logout Connection to 122.112.***.*** closed.

参考文章:探索Pexpect 1,探索Pexpect 2,python pexpect学習と探索