首页 > 代码库 > 用pexpect做简单的输出判断
用pexpect做简单的输出判断
之前用pexpect实现过一些简单的交互式操作,比如下边的登录操作:
import pexpect
simulators={‘10.10.10.10‘: ‘root‘}
users={‘testuser‘:‘1101‘}
child = pexpect.spawn(‘ssh root@‘ + simulator) i = child.expect([‘[Pp]assword:‘,‘continue connecting (yes/no)?‘,‘#‘]) if i == 0: child.sendline(simulators[simulator]) elif i == 1: child.sendline(‘yes‘) child.expect(‘[Pp]assword:‘) child.sendline(simulators[simulator]) elif i == 2: pass else: print(‘Login failed‘)
expect方法可以用于等待子程序中产生特定输出,然后做出特定的响应,如果没有出现想要的字符串就会抛出pexpect.TIMEOUT异常。
假如我想添加一个组或者用户,我想先判断系统中是否已经有组存在,如果有,我就去给这个组添加用户;如果没有,我就创建,然后再添加用户:
child.sendline(‘cat /etc/group | grep teams:‘) child.expect(‘teams:‘) child.expect(‘#‘) if ‘teams:‘ in child.before: print(‘Group teams existed, continue to add users‘) else: child.sendline(‘groupadd -g 1100 teams‘) child.expect(‘#‘) child.sendline(‘cat /etc/group | grep teams:‘) child.expect(‘teams:‘) child.expect(‘#‘) if ‘teams:‘ in child.before: print(‘Group teams added for %s successfully‘ %(simulator)) else: print(‘Group teams added failed, check on simulator %s manually, go to next simulator‘ %simulator) continue
‘‘‘命令在linux中的输出
openstack12:/ # cat /etc/group | grep teams
teams:!:1100:
openstack12:/ #
‘‘‘
说明:
child.expect(‘teams:‘)会匹配命令以及命令说出中的第一个teams,也就是‘cat /etc/group | grep teams’中的teams,此时的child.before是第一行中的‘ cat /etc/group | grep ’,所以我继续做一个child.expect(‘#‘),‘#’匹配的是最后一行的‘#’,此时的child.before包含的内容是,第一行teams后边的回车以及第二行和第三行全部,然后对这个child.before做出判断即可:)
用pexpect做简单的输出判断
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。