前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >宋宝华:Don Libes的expect,终端交互式编程的精神鼻祖

宋宝华:Don Libes的expect,终端交互式编程的精神鼻祖

作者头像
Linux阅码场
发布2019-10-08 15:57:40
6810
发布2019-10-08 15:57:40
举报
文章被收录于专栏:LINUX阅码场LINUX阅码场

expect

提示

阅读本文需要: 10分钟

本文难度系数:入门

如果你在期待一种编程语言,可以自动在terminal里面输入命令,并且等待terminal的输出结果,之后判断输出是否如你期待(expect),并根据terminal的输出决定下一步动作,那么expect就是体现这种精神的语言鼻祖,它是Tcl脚本语言的扩展。

假设我们要ssh登陆192.168.174.129这台电脑,它的用户名是baohua,密码也是baohua,我们要执行如下操作:

1. ssh到192.168.174.129

2. 在登陆完成后,我们敲击exit退出登陆的电脑

如果手动敲击命令,它的序列大概是这样的:

上述命令的交互过程,我们完全可以用expect来实现:

这样子看看不大懂,我们画一下映射图,基本就懂了:

说白了expect的逻辑就是:

自动敲一个命令,等terminal前一个命令的输出,等到了期待的输出,再敲一个命令.....

所以这种语言,对于嵌入式这种带串口的、网络的,这种做自动测试可以说不要太牛逼。想当年,我们在Analog Devices(ADI)的Linux Team做Blackfin Linux的时候,就是用的expect语言做自动测试的。串口上各种自动敲命令,等结果,然后再自动敲下一个命令......没日没夜地驱动嵌入式电路板让我们期待的逻辑去run。

expect的精神比较伟大,也被各种其他语言所模仿和支持,比如python里面的pexpect等:

pexcept(https://github.com/pexpect/pexpect)号称自己:

Pexpect is in the spirit of Don Libes' Expect, but Pexpect is pure Python.

上述ssh同样的功能,如果换支持pexpect的python执行,代码如下:

文中所涉及到的软件的安装:

expect语言:apt install expectpython expect:pip install pexpect

expect语言:apt install expectpython expect:pip install pexpect

expect语言:apt install expectpython expect:pip install pexpect

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Linux阅码场 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档