温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

系统批量运维管理工具pexpect

发布时间:2020-06-16 00:46:57 来源:网络 阅读:696 作者:慕容致杰 栏目:软件技术

1、介绍pexpect

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

2、pexpect的组件介绍

 2.1、spawn类

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

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

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

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

child=pexpect.spawn('/bin/bash -c "ls -l | grep LOG > logs.txt"')

child.expect(pexpect.EOF)

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

shell_cmd = 'ls -l | grep LOG >logs.txt'

child=pexpect.spawn('/bin/bash',['-c',shell_cmd])

child.expect(pexpect.EOF)


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

  child=pexpect.spawn('some_cmd')

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

  child.logfile = fout

或者:child.logfile=sys.stdout

系统批量运维管理工具pexpect

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

定义的方法是expect(pattern,timeout=-1,searchwindowsize=-1)

pattern表示字符串、pexpect.EOF(指向缓冲区尾部)、pexpect.TIMEOUT、正则表达式。


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

send(self,s)发送命令,不回车

sendline(self,s='')发送命令,回车

sendcontrol(self,char)发送控制字符,如child.sendcontrol('c')相当于ctrl+c

sendeof()发送eof


2.2>run函数

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

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

import pexpect

pexpect.run('scp filename user@ip:~',events={'(?)password':mypassword})


3、pxssh

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

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


系统批量运维管理工具pexpect

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI