zoukankan      html  css  js  c++  java
  • expectFAQ(附一个python批量任务脚本)持续更新

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

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

    [复制链接]

    0
    0

    本帖最后由 expert1 于 2012-03-09 17:21 编辑



    firstly,版权没有,随意COPY && PASTE,但注意注明出处即可。



    前言,这里讲Expect的只言片语,具体要了解需要熟悉TCL语言的相关知识。这里举了最常用的问题,就系统管理而言,足以满足日常需求,若是你做软件自动化测试。要深入了解expect,请下载http://bbs.chinaunix.net/thread-1769951-1-1.html此外还需要熟悉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执行完毕,下边才能退出子程序。

  • 相关阅读:
    集成学习
    集成学习
    集成学习
    集成学习-Majority Voting
    pandas 之 groupby 聚合函数
    LDA-作为线性判别 降维 推导
    LDA-作为线性判别 分类器 推导
    ML-逻辑回归推导
    第一册:lesson eighty one.
    第一册:lesson seventy nine.
  • 原文地址:https://www.cnblogs.com/lexus/p/2391728.html
Copyright © 2011-2022 走看看