我是一个期待的初学者......我写了一个小脚本,必须登录到路由器并执行一些命令..
但不知何故,我发现即使我使用发送“管理秀平台”THRICE,它只对我工作两次..我只得到admin show platform
两次的输出。
任何人都可以检查代码并指出我实际上在搞砸代码的地方..
Gsaxena#
Gsaxena#
Gsaxena# ./testTool
spawn /usr/bin/ksh
telnet 5.28.7.103
$ telnet 5.28.7.103
Trying 5.28.7.103...
Connected to 5.28.7.103.
Escape character is '^]'.
User Access Verification
Username:
Username: lab
Password:
RP/0/RP0/CPU0:Billorani#debug ospf ospf1 adj
Mon Oct 14 17:16:06.144 UTC
**RP/0/RP0/CPU0:Billorani#show platform**
Mon Oct 14 17:16:06.416 UTC
Node Type PLIM State Config State
------------- ----------------- ------------------ --------------- ---------------
x/x/x0 xxxxG N/A IN-RESET PWR,NSHUT,MON
**RP/0/RP0/CPU0:Billorani#show platform**
Mon Oct 14 17:16:06.416 UTC
Node Type PLIM State Config State
------------- ----------------- ------------------ --------------- ---------------
x/x/xxx0 xxxxG N/A IN-RESET PWR,NSHUT,MON
RP/0/RP0/CPU0:Billorani#
Gsaxena#
Gsaxena#
Gsaxena#
Gsaxena#
Gsaxena#
#!/usr/bin/expect
set timeout 30
set hostcut "Bil"
sleep 5
set timeout 5
spawn /usr/bin/ksh
send "telnet 5.8.7.103\r"
expect ".*\'\^\]\'\. *"
send "\r"
expect "Username\:"
send "lab\n"
expect "Password\: "
send "lab\n"
sleep 10
expect -re "RP\/.\/.*\/CPU.:$hostcut.*#"
send "debug ospf ospf1 adj\n"
expect -re "RP\/.\/.*\/CPU.:$hostcut.*#"
send "admin show platform\n"
expect -re "RP\/.\/.*\/CPU.:$hostcut.*#"
send "admin show platform\n"
expect -re "RP\/.\/.*\/CPU.:$hostcut.*#"
send "admin show platform\n"
答案 0 :(得分:1)
我真的应该把它放在一个实际的答案中,而不是在评论中,因为我没有给你一个最后的答案,但似乎评论只能由已经存在一段时间的人留下(有一个在你离开之前的最低声誉。)
无论如何,我想建议你在脚本开头附近的地方添加exp_internal 1
。这将提供大量有用的调试信息,并且很可能指向正在发生的事情。如果您需要帮助,请随时在此处发布。
我不知道你发布的信息有什么问题......似乎没有任何错误。我会采取不同的做法,而不是产生一个Korn shell进程,然后发送一个telnet命令,我只是直接产生telnet命令(代码少,资源少)。但这并不是困扰你的事情,所以不用担心。
我不熟悉您登录的操作系统...是Cisco IOS XR吗?我发现admin show platform
命令,而你的标准输出只显示show platform
,这令我感到困惑吗?另外,一些提示显示双星号(**)的处理是什么,而其他提示没有?
最后一件事,看似愚蠢,但是......你可以手动访问设备并按照确切的顺序发出这4个确切的命令吗?
此致 詹姆斯
答案 1 :(得分:0)
在您的代码中
send "admin show platform\n"
使用" \ r"而不是" \ n"