博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
expectFAQ(附一个python批量任务脚本)--持续更新
阅读量:6172 次
发布时间:2019-06-21

本文共 1345 字,大约阅读时间需要 4 分钟。

expectFAQ(附一个python批量任务脚本)--持续更新

 

[复制链接]

0

0

本帖最后由 expert1 于 2012-03-09 17:21 编辑
firstly,版权没有,随意COPY && PASTE,但注意注明出处即可。
前言,这里讲Expect的只言片语,具体要了解需要熟悉TCL语言的相关知识。这里举了最常用的问题,就系统管理而言,足以满足日常需求,若是你做软件自动化测试。要深入了解expect,请下载 此外还需要熟悉TCL,毕竟它和TCL相关。
一,expect的FAQ
如何匹配多种情况,典型的例子就是ssh ,第一个可能是yes,然后password,或是直接password。就是并行匹配的情况,见下面例子。
  1. #!/usr/bin/expect
  2.     set timeout 60
  3.     set pwd "该机器的密码"
  4.     spawn ssh  10.10.10.1
  5.            expect {
  6.                       "\[#$\]"     {send "\r" }   ### 假如有了ssh 公钥之类的,直接回车。当然普通用户下边还可能需要sudo,自己处理一下吧。
  7.                     "not know" {send_user "[exec echo \"not know\"]";exit}
  8.                     "(yes/no)?" {send "yes\r";exp_continue} #continue的意义,靠猜测也能差不多知道了吧?可以Man expect
  9.                     "password:" {send  "$pwd\r"}
  10.                     "Permission denied, please try again." {
  11.                         send_user "[exec echo \"Error:Password is wrong\"]"
  12.                         exit  }
  13.                     }

复制代码

####  把所有可能出现的情况列举出来做匹配,假如写法如下就是串行执行了。

expect "*#"
send "ifconfig\r"
send "exit\r"
expect eof # 只有spawn产生的进程的相关信息才能被expect捕捉到,还包含2个特殊情况,eof和timeout,eof关闭spawn 产生的spawn id :exp_id,也就是结束标记。这个eof是必不可少的,至于为什么,我也没找到权威答案,包括手册都没提到,但实践中发现很多时候不加会导致得不到你要的结果。请看下边的一个例子:

  1. #!/usr/bin/expect -f
  2. set ip 10.1.1.1
  3. set pwd 123456
  4. spawn scp ssh.exp root@$ip:/tmp
  5. expect {
  6.          "(yes/no)?" {send "yes\r";exp_continue}
  7.          "password:" {send  "$pwd\r"}
  8.                     }
  9. # expect eof

复制代码

假如最后的expect eof给注释了,文件不会被scp到10.1.1.1上,也许你感觉很奇怪,关键就在于这个eof,我看了相关资料包括debug信息没有找到令人信服的答案。

我个人猜测是,没有eof,那么仅仅是把密码send过去,连回车都没有执行。然后就异常退出了。加了eof部分,让Expect执行完毕,下边才能退出子程序。

转载地址:http://bvtba.baihongyu.com/

你可能感兴趣的文章
宽字节与多字节之间的转换
查看>>
SEO的重要性
查看>>
ASP.NET 运行时详解 揭开请求过程神秘面纱
查看>>
Oracle 索引的失效检查
查看>>
C语言第五次作业--数据类型
查看>>
系统架构师-基础到企业应用架构-业务逻辑层
查看>>
高手详解SQL性能优化十条建议
查看>>
修改 IntelliJ IDEA 默认配置路径
查看>>
《现在的泪,都是当年脑子进的水》读书笔记
查看>>
IOSday04 UIButton使用
查看>>
铁大好青年内部分组
查看>>
unity3D ——自带寻路Navmesh入门教程(一)(转)
查看>>
判断字符串是否为数字的函数
查看>>
[emuch.net]MatrixComputations(7-12)
查看>>
linux 命令 — 文件相关
查看>>
自己空闲的时候封装一下
查看>>
Datagard產生gap
查看>>
本机web开发环境的搭建--nginx篇
查看>>
rcnn 理解笔记
查看>>
问答项目---登陆验证码点击切换及异步验证验证码
查看>>