用pexpect做简单的输出判断

之前用pexpect实现过一些简单的交互式操作,比如下边的登录操作:

import pexpect

simulators={‘10.10.10.10‘: ‘root‘}users={‘testuser‘:‘1101‘}

child = pexpect.spawn(‘ssh [email protected]‘ + 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  teamsteams:!: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做出判断即可:)

时间: 2024-10-05 05:31:58

用pexpect做简单的输出判断的相关文章

Nginx Rewrite的应用-根据访问平台做简单跳转

Nginx Rewrite的应用-根据访问平台做简单跳转 Rewrite模块简介 Rewrite最主要的作用就是对URL进行重写,即重定向.举个简单的例子,我们用电脑打开淘宝显示出的页面与手机打开显示出的页面,或者是IE与Chrome浏览器打开的页面,有着特别大的差别,这就是使用了Rewrite模块,为用户提供最合适的页面. Rewrite的配置 一. 在配置之前请先安装好Nginx.不会安装的同学请看我之前写过的Nginx的编译安装.二. 下面我们来编辑Nginx的主配置文件: [[email

用H5+Boostrap做简单的音乐播放器

用H5+Boostrap做简单的音乐播放器 前言:这个是综合一下我最近在学的东西做的小Demo,到实际使用还有距离,但是用来练手巩固知识点还是不错的,最近在二刷JS书和Boostrap.css的源码,做完这个Demo也算是暂告一段落,接下来是jQuery的源码和Boostrap.js的源码,任务很艰巨呢,加油~在此就不整篇的贴代码了,如果感兴趣的小伙伴可以发消息给我,可以把代码传给你们~ 正文: 先上效果图 1.布局:Boostrap里的响应式和自适应布局是自然跑不掉的,container中嵌套

qtday02 qt做简单的加法器和模拟登陆功能

//在3t2目录下 //adder.h /* qt简单加法计算器 */ #ifndef ADDER_H #define ADDER_H #include<QDialog> #include<QLineEdit> #include<QtWidgets/QPushButton> #include<QtWidgets/QLabel> class Adder:public QDialog{ Q_OBJECT//让自定义的槽函数生效 private: QLineEdi

做简单直接的事情

回顾自己工作四年多的时间,很多时候都是在一个等待的状态,真的没有好好去认真的认识一下我们周围的世界,没有好好了解做人做事的方法和套路.从编程的角度来看,世间万物皆对象,那么更加抽象一层的概念就是万物发展皆套路,而身处局中的我们也是如此,"简单直接"的使用套路远胜过浑浑噩噩的等待和迷茫. 这里所说的套路是什么呢,并不是指一些投机取巧的方法,正好相反,使用这些套路之前,我们要了解我们周围的社会环境是如何运作的,就像在选择一种框架和语言时,我们需要知道软件的运用场景是怎样的,如果只是套用所谓

php或JS中输出判断项

不管在php,还是AJAX中,我们总会用到判断一个用户的权限等问题,根据权限的不同,我们需要对代码进行不同的判断. 不管是php还是AJAX这里边的操作理念是相同的,这里就做个简单的示范吧! 这里就是一个最简单的php判断 这是AJAX的判断,满足条件是有值的,不满足是空的,最后在加一个点击事件,就大功告成了. 难点:1.AJAX时,注意提前定义好一个空的数组. 2.php时,注意数组的名称不要重复. 3.这样代码会很冗杂,注意加好注释

第17章 文本和字体_17.1-17.2 简单文本输出、 字体的背景知识

17.1 简单文本输出 17.1.1 文本输出函数 (1)TextOut(hdc,xStart,yStart,pString,iCount) ①xStart和yStart使用的是逻辑坐标,TextOut并不以NULL来做字符串的结束,需指定字符的个数iCount的值 ②SetTextAlign会改变xStart和yStart的含义 SetTextAlign 坐标值的含义 TA_LEFT xStart:第一个字符的左侧坐标 TA_RIGHT xStart:最后一个字符的右侧坐标 TA_CENTER

JavaScript,一个超级简单的方法判断浏览器的内核前缀

先说明,此处的方法是说超级简单的方法,不是指代码超级少,而是用非常简单的知识点,只要懂得怎么写JavaScript的行内样式就可以判断. 大家应该还记得JavaScript行内样式怎么写吧?(看来我是废话了!) 在前端开发过程中,有时我们需要判断浏览器的内核前缀,对不同的浏览器做出不同的处理,因此我们可以这么做. alert(element.style.webkitTransition); 这个是获取以webkit为前缀的transition值.但如果不是webkit为前缀的浏览器,则会返回un

张小龙演讲全文:如何把产品做简单

张小龙演讲全文:如何把产品做简单 浓缩观点 微信团队带头人张小龙在腾讯内部与产品经理进行了长时间分享,以微信为主,间以对腾讯和其他公司产品的点评,详细阐述了他的产品观与设计观.本文系根据现场速记整理. iPhone的设计灵感是来自于马桶吗? 今天从一个小故事开始讲:为什么苹果的手机只有一个按钮? (台下:我觉得对于用户来说,只有一个按钮不会有太多的干扰,只要从这里开始,其它的菜单都在这里面了,这是我个人的一些想法.) 上次在分享的时候 Martin(腾讯总裁刘炽平,编者注)也在,他认为是因为这一

OpenCV对图像做简单处理——平滑滤波

首先必须知道几个关键函数--cvLoadImage,cvCreateImage和cvSmooth. 一.主要函数的简单介绍 1.1 cvLoadImage 函数功能:把图片加载到内存中 函数原型:IplImage* cvLoadImage( const char* filename, int flags=CV_LOAD_IMAGE_COLOR ); 函数说明: filename :要被读入的文件的文件名(包括后缀): flags :指定读入图像的颜色和深度: 指定的颜色可以将输入的图片转为3通道