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\nUSER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT\r\nroot tty1 23Sep17 38days 0.02s 0.02s -bash\r\nroot pts/0 103.20.249.250 13:55 5.00s 0.14s 0.09s python3.4\r\n'
二、使用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\n ' ##################################################################### # 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.
参考文章:探索Pexpect1,探索Pexpect2,python pexpect 学习与探索