龙空技术网

python快速入门教程:命令行自动化工具与pexpect

开源那些事儿 927

前言:

而今看官们对“expect脚本telnet”大致比较关切,大家都想要学习一些“expect脚本telnet”的相关文章。那么小编在网上汇集了一些有关“expect脚本telnet””的相关资讯,希望咱们能喜欢,咱们一起来了解一下吧!

摘要:命令行自动化与pexpect 简介 Pexpect 是一个用来启动交互式命令行子程序并对其进行自动控制的 Python 工具模块。 Pexpect 可以用来和像 ssh、ftp、passwd、telnet 等命令行程序进行自动交互。

命令行自动化与pexpect

简介

Pexpect 是一个用来启动交互式命令行子程序并对其进行自动控制的 Python 工具模块。 Pexpect 可以用来和像 ssh、ftp、passwd、telnet 等命令行程序进行自动交互。可广泛用于自动化运维和测试,实现同时控制多台设备和自动化。Linux中的知名装包软件就使用了Pexpect。 Pexpect在IBM,alibaba,google等公司有广泛使用,在 的日下载量一万左右。

纯python实现,依赖pty模块(不支持Windows)。

最新英文版文档参见:

安装:

版本要求:Python 2.6、3.2 或以上

快速入门

ssh登录是常用的操作,过程如下:

下面我们用pexpect来自动实现这个过程:

上面最后一句在非交互式的情况下要关闭连接,用child.close()替换即可。

上 述操作除了interact外,都可以用python的ssh模块:paramiko代替。不过对于一些同时支持telenet、ftp、ssh等协议命 令行的通信设备,可以用pexpect通杀。telenet、ftp、ssh等从协议的层次联系,pexpect会更接近用户使用,更加适合自动化测试。

两个重要方法: expect()和send() (以及sendline() )。expect可以接受正则表达式作为参数。

before包含预期字符串之前的信息, after包含匹配模式及其以后的内容。

批量操作多台服务器功能:实现同时对多台linux服务器通过ssh执行同一命令。技术基础: python pexpect,不支持windows。参数:固定参数pwd:远程服务器密码,用户名目前写死是root,可自行修改。可选参数-c CMDS:要执行的命令,比如:"ls -l","cd /home/test && test.py&如果不选择,会从当前目前的cmd.txt读取。可选参数-s SERVERS:目标服务器,比如192.168.0.1,最后一位数可以用-表示一个区间,分号用于分割不同的ip。如果不选择,会从当前目前的ip.txt读取。

库文件:common.py

主脚本batch.py :

执行演示:

root@192.168.0.75's p assword: Last login: Thu May 8 17:02:56 2014 from 192.168.0.232[root@localhost ~ ]# cat /etc/redhat-releaseCentOS release 6.4 (Final)[root@localhost ~ ]#******************************************************************************** Connect to host: 192.168.0.76 Last login: Thu May 8 17:03:00 2014 from 192.168.0.232[root@localhost ~ ]# cat /etc/redhat-releaseCentOS release 5.8 (Final)[root@localhost ~ ]#******************************************************************************** Connect to host: 123.1.149.26 Last login: Thu May 8 16:46:56 2014 from 183.56.157.199[root@LINUX ~ ]# cat /etc/redhat-releaseRed Hat Enterprise Linux Server release 6.5 (Santiago)[root@LINUX ~ ]#[root@AutoTest batch]#

其他命令自动化工具

python远程执行与部署库,运维的最爱。

API概览

EOF与TIMEOUT

EOF(End Of File)与TIMEOUT可以在expect方法中使用,它们不是正则表达式,而是常量。

源于异常,而不是BaseException例外。从BaseException直接继承的例外情况赶上他们几乎总是错误的做法保留。

如果子进程已经退出,读取子进程的输出会引发EOF异常。此时子进程的输出全部在before中。

expect()接受的参数是正则表达式或正则表达式列表,可匹配多个可选的响应。比如ssh登录的各种情况处理:

expect()的超时默认为30秒,超时时生成TIMEOUT异常。可以修改:

行尾处理

Pexpect匹配的正则表达式与标准的有些差异,默认是非贪婪匹配。Pexpect一次读取一个字符读,这样行尾标识$失去了意义。行尾用"\r\n"(CR/LF)表示。Pexpect中的"\n"实际对应"\r\n"。匹配行尾的操作如下:

尽量用:

API文档

pexpect.screen和pexpect.ANSI在版本4已经不推荐使用,建议用pyte替代。

class spawn

调用示例:

pexpect不能解释shell元字符,比如 (>, |, or *),需要启动shell来解决该问题:

日志输出:

输出到stdout

更多资讯,尽在阿里云科技快讯~

来科技快讯看新闻鸭~

快点关注我认识我爱上我啊~~~

标签: #expect脚本telnet