【问题标题】:Expect loses connection after telnet and does not send any subsequent "expect send" commandstelnet 后Expect 失去连接并且不发送任何后续的“expect send”命令
【发布时间】:2012-08-22 07:32:28
【问题描述】:

我有一个自动的 telnet 会话.. 我的问题有点令人困惑,但我试着用例子来解释....

例子1:

spawn telnet 172.23.144.180 2068
after 2000
send "\r"

expect "loader>"
send "boot n7000-s2-kickstart.6.1.1.66.gbin n7000-s2-dk9.6.1.1.66.gbin\r"
### HERE I NEED TO WAIT FOR 3 MINUTES FOR MY EXPECT STRING ####
### SO IM SETTING TIME OUT ###
set timeout 180

### AFTER 3 MIN ### 
expect "Feature poap enabled/disabled"
send "yes\r"

expect "Do you want to enforce secure password standard (yes/no)"
send "yes\r"

发生了什么,场景 1:它永远等待,不向控制台发送任何内容(我在控制台上看到“Feature poap enabled/disabled”日志)。

发生了什么,场景 2:如果我给“after 180000”,即睡眠 3 分钟;代替 “set timeout 180”:无论如何,脚本都会发送“yes”,即第一个“expect send”..

我希望我的脚本仅在看到“Feature poap enabled/disabled”时才发送“是”...有人可以帮我这样做吗?

我进行了更多研究,发现只有 telnet 进程才会发生这种情况..而不是常规进程(即不是 telnet)

package require Expect
set timeout 180
expect "Feature poap enabled/disabled"
send "Yes\r"

工作正常; 180000 之后也可以正常工作...

感谢您的帮助..

【问题讨论】:

  • 这是什么操作系统? Windows 还是某种形式的 Unix?它真的很重要,因为 Windows 上的一些重要交互...
  • 在脚本开头添加:exp_internal 1 看看为什么不匹配。
  • 我问是因为 Telnet 在 Windows 上无法与 Expect 一起使用(我可以解释原因,但它很可怕而且非常晦涩难懂!)最简单的解决方法是使用 plink -telnet(其中 plink 是一部分PuTTY 套件)。
  • AFAIK 在 windows 上的 Telnet 不是一个普通的 CLI,它使用TUI。用期望编写 TUI 脚本很困难(如果不是不可能的话)。
  • 使用 exp_internal 1 并发现无论期望的字符串是什么......它搜索给定的字符串几秒钟......然后打印“expect:超时”并发送.ie“是”在我的情况下......所以我使用了 set timeout -1 它工作正常......它将永远等待字符串......这有点我需要......谢谢大家投入..

标签: session tcl telnet expect


【解决方案1】:

使用 exp_internal 1 并发现无论期望的字符串是什么......它搜索给定的字符串几秒钟......然后打印“期望:超时”并发送。即“是”在我的情况下......所以我使用 set timeout -1 它工作正常......它将永远等待字符串......这有点我需要......谢谢大家的投入...... -

【讨论】:

    猜你喜欢
    • 2012-04-01
    • 2013-09-03
    • 1970-01-01
    • 2016-02-05
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 2016-09-20
    相关资源
    最近更新 更多