pexpect可以理解成Linux下expect的python封装,通过pexpect可以时间对ssh、ftp、passwd、telnet等命令进行交互,达到自动化的目的。
一、pexpect 安装
pip/easy_install 安装:
pip install pexpect
essy_install pexpect
源码安装:
wget http://github.com/pexpect/pexpect/releases/download/3.0/pexpect-3.0.tar.gz
tar -zxvf pexpect-3.0.tar.gz
cd pexpect-3.0
python setup.py install
二、pexpect核心组件
1、spawn类
spawn类是pexpect的主要类接口,功能是启动和控制子应用程序,构造函数结构如下:
class pexpect.spawn(command,args=[],timeout=30,maxread=2000,searchwindowsize=None,logfile=None,cwd=None,enc=None,ignore_signup=True)
其中command参数可以是任意已知的系统命令,如:
child = pexpect.spawn('/usr/bin/ssh root@exmaple.com')
当子程序需要参数时,可以使用python列表代替参数项,如:
child = pexpect.spawn('/usr/bin/ssh‘ ['root@exmaple.com'])
child = pexpect.spawn('ls',['lat','/tmp'])
2、pexpect不会解析shell命令当中的元字符,包括重新定向">" 管道"|" 或通配符"*"。可以把包含这些元字符的命令
作为/bin/bash的参数进行调用,如:
child = pexpect.spawn('/bin/bash -c " ls -l | grep LOG > logs.txt "')
3、获取pexpect的输入输出信息,方便调试
1)写到日志文件
child = pexpect.spawn(command)
output = file('log.txt','w')
child.logfile = output
2)输出到标准输出
child = pexpect.spawn(command)
child.logfile = sys.stdout
4、expect方法
expect方法定义子程序的输出匹配规则,方法定义如下:
expect(pattern,timeout=-1,searchwindowsize=-1)
pattern可以是字符串、pexpect.EOF(指向缓冲区尾部,无匹配项)、pexpect.TIMEOUT(匹配等待超时)、正则表达式或则前面四种类型组成的列表。当pattern为一个列表时,返回的匹配元素的索引;当列表不止一个元素备匹配时,则返回的结果是子程序最想输出的那个元素,如:
import pexpect
child = pexpect.spawn('echo "foobar"')
print child.expect(['bar','foo','foobar'])
#输出 1 ,即 'foo'被匹配。
5、read相关方法
send(self,string) #发送命令,不回车
send(self,string) #发送命令,回车
sendcontrol(self,char)#发送控制符,如sendcontrol('c') 等价于 'ctrl+c'
一、pexpect 安装
pip/easy_install 安装:
pip install pexpect
essy_install pexpect
源码安装:
wget http://github.com/pexpect/pexpect/releases/download/3.0/pexpect-3.0.tar.gz
tar -zxvf pexpect-3.0.tar.gz
cd pexpect-3.0
python setup.py install
二、pexpect核心组件
1、spawn类
spawn类是pexpect的主要类接口,功能是启动和控制子应用程序,构造函数结构如下:
class pexpect.spawn(command,args=[],timeout=30,maxread=2000,searchwindowsize=None,logfile=None,cwd=None,enc=None,ignore_signup=True)
其中command参数可以是任意已知的系统命令,如:
child = pexpect.spawn('/usr/bin/ssh root@exmaple.com')
当子程序需要参数时,可以使用python列表代替参数项,如:
child = pexpect.spawn('/usr/bin/ssh‘ ['root@exmaple.com'])
child = pexpect.spawn('ls',['lat','/tmp'])
2、pexpect不会解析shell命令当中的元字符,包括重新定向">" 管道"|" 或通配符"*"。可以把包含这些元字符的命令
作为/bin/bash的参数进行调用,如:
child = pexpect.spawn('/bin/bash -c " ls -l | grep LOG > logs.txt "')
3、获取pexpect的输入输出信息,方便调试
1)写到日志文件
child = pexpect.spawn(command)
output = file('log.txt','w')
child.logfile = output
2)输出到标准输出
child = pexpect.spawn(command)
child.logfile = sys.stdout
4、expect方法
expect方法定义子程序的输出匹配规则,方法定义如下:
expect(pattern,timeout=-1,searchwindowsize=-1)
pattern可以是字符串、pexpect.EOF(指向缓冲区尾部,无匹配项)、pexpect.TIMEOUT(匹配等待超时)、正则表达式或则前面四种类型组成的列表。当pattern为一个列表时,返回的匹配元素的索引;当列表不止一个元素备匹配时,则返回的结果是子程序最想输出的那个元素,如:
import pexpect
child = pexpect.spawn('echo "foobar"')
print child.expect(['bar','foo','foobar'])
#输出 1 ,即 'foo'被匹配。
5、read相关方法
send(self,string) #发送命令,不回车
send(self,string) #发送命令,回车
sendcontrol(self,char)#发送控制符,如sendcontrol('c') 等价于 'ctrl+c'