用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做出判断即可:)
 

 

转载于:https://www.cnblogs.com/jason7201/p/6025845.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值