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
其中期待方法定义了一个子程序输出的匹配规则:
定义的方法是期望(模式,超时=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链接,注销()断开连接,提示()等待系统提示符,用户等待命令执行完毕。