系统批量运维管理工具pexpect

1,介绍pexpect

通过pexpect我们可以实现对ssh, ftp, passwd, telnet等命令进行自动交互,不需要人工干预达到自动目的。

2, pexpect的组件介绍

, 2.1,派生类

,,作用:启动和控制子应用程序,其构造函数如下:

类pexpect.spawn(命令,参数=[],超时=30,maxread=2000, searchwindowsize=没有日志文件=,=慢性消耗性疾病,env=None, ignore_sighup=True)

其中命令是任意已知的系统命令,超时是等待结果的超时时间,maxread是从终端一次读取的最大字节数,searchwindowsize是匹配缓冲区字符串的位置。

,注意点:pexpect不会解析壳命令中的元字符(重定向祝辞,管道|,通配符*),不过将存在这三个特殊元字符的命令作为/bin/bash的参数进行调用,可以解决这个问题。比如:

子=pexpect。产卵('/bin/bash - c”ls - l | grep日志比;logs.txt”)

child.expect (pexpect.EOF)

将命令的参数以Python列表形式替换:

shell_cmd=' ls - l | grep日志祝辞logs.txt”

子=pexpect.spawn (“/bin/bash”, [' c ', shell_cmd])

child.expect (pexpect.EOF)


调试代码是,pexpect提供两种方式可以查看输入输出:1在写入到日志2祝辞输出到stdout

,孩子=pexpect.spawn (some_cmd)

,输出信号=文件(“mylog.txt”、“w”)

,的孩子。日志文件=输出端

或者:child.logfile=系统。stdout

系统批量运维管理工具pexpect

其中期待方法定义了一个子程序输出的匹配规则:

定义的方法是期望(模式,超时=1,searchwindowsize=1)

模式表示字符串,pexpect.EOF(指向缓冲区尾部),pexpect。超时,正则表达式。


发送向子程序发送相应命令,相当于标准输入键盘

发送(自我,s)发送命令,不回车

sendline(自我,s=")发送命令,回车

sendcontrol(自我,字符)发送控制字符,如child.sendcontrol (“c”)相当于ctrl + c

sendeof()发送eof


2.2的在运行函数

运行是使用pexpect进行封装的外部命令的函数

run(命令,超时=1,withexitstatus=False,事件=None, extra_args=没有日志文件=,=慢性消耗性疾病,env=None)进口pexpect

pexpect.run (scp文件名user@ip: ~,事件={(?)密码:我的密码})


3, pxssh

pxssh针对ssh会话操作做了一层封装,提供了更加直接的操作方式

pxssh常用方法:登录()建立ssh链接,注销()断开连接,提示()等待系统提示符,用户等待命令执行完毕。


系统批量运维管理工具pexpect

系统批量运维管理工具pexpect