pexpect

一.概述

1.pexpect可以理解成Linux下的expect的Python封装,通过pexpect可以实现对ssh、ftp、passwd、telnet等命令行进行自动交互,而无需人工干涉来达到自动化的目的;

2.安装

pip install pexpect

或easy_install pexpect

wget https://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

若导入模块expect没有异常,则表示安装成功;


二.pexpect核心组件

1.spawn类

1)spawn是pexpect的主要类接口,功能是启动和控制子应用程序,构造函数:

class pexpect.spawn(command, args=[], timeout=30, maxread=2000, searchwindowsize=None, logfile=None, cwd=None, env=None, ignore_sighup=True)

command:任何已知的系统命令,当该命令需要参数时,可以通过Python列表来传递,如:pexpect.spawn('/usr/bin/ssh', ['user@IP'])

timeout:等待结果的超时时间;

maxread:pexpect从终端控制台一次读取的最大字节数;

searchwindowsize:匹配缓冲区字符串的位置,默认是开始位置匹配;

注意:pexpect不会解析shell命令中的元字符,包括重定向“>”,管道“|”,通配符“*”,但是可以通过将存在这三个元字符的命令作为/bin/bash的参数来调用:

child = pexpect.spawn('/bin/bash -c "ls -l > file"')

child.expect("expect.EOF")


2)获取输出:

a.写入日志:

child = pexpect.spawn('command')

fout = file('mylog.txt', 'w')

child.logfile = fort


b.输出至标准输出:

child = pexpect.spawn('command')

child.logfile = sys.stdout


2.expect方法

expect方法定义了一个子程序输出的匹配规则;

expect方法定义:expect(pattern.timeout=-1,searchwindowsize=-1)

pattern表示匹配的字符串、pexpect.EOF(指向缓冲区尾部,无匹配项)、pexpect.TIMEOUT(匹配等待超时)、正则表达式或者他们组成的列表;

timeout:指定等待匹配结果的超时时间,单位为秒;

searchwindowsize:匹配缓冲区字符串的位置,默认是从开始位置匹配;


expect方法有before和after成员,before成员保存了最近匹配成功之前的内容,after成员保存了最近匹配成功之后的内容;


3.run函数

run函数是使用pexpect进行封装的调用外部命令的函数,类似于os.system或os.popen方法;

函数定义:

pexpect.run(command, timeout=-1, withexitstatus=Fause, events=None, extra_args=None, logfile=None, cwd=None, env=None)

command:系统已知的任何命令;

events:字典,定义了expect及sendline方法的对应关系;

使用:run('scp foo [email protected]:.', events={'(?i)password':mypasswd})


4.pxssh类

pxssh是pexpect的派生类,针对在ssh回话操作上再做一层封装,提供与基类更加直接的操作方法;

pxssh类定义:

class pexpect.pxssh(timeout=30, maxread=2000, searchwindowsize=None, logfile=None, cwd=None, env=None)


pxssh常用的三个方法:

login():建立ssh连接;

logout():断开连接;

prompt():等待系统提示符,用于等待命令执行结束。



你可能感兴趣的:(python)