尝试登录Cisco路由器。它没有在“--More--”提示符下发送正确的命令。我认为这可能与我发送的内容有关。我需要在收到更多提示时发送空格命令。
它会发送一个“\”字符,但会发送一个“”或任何随机字母。
当前代码:
import pexpect
import sys
import os
import getpass
hostname = "router-2"
username = raw_input('Enter Your username: ')
password = getpass.getpass('Password:')
fout = file('agglog.txt','w')
child = pexpect.spawn('ssh %s@%s' % (username, hostname))
child.logfile_read = fout
child.expect('Password:')
child.sendline(password)
child.expect('>')
child.sendline('enable')
child.expect('Password:')
child.sendline(password)
child.expect('#')
child.sendline('show processes cpu history')
i = child.expect(["--More--","#"])
if i==0:
child.sendline(' ') ###PROBLEM IS HERE
else:
child.sendline('show processes cpu | i Core 0|Core 1')
child.expect('#')
child.sendline('logout')
再次,在 --MORE--提示它只是在试图发送空间命令时正在等待某事。在Cisco路由器上,当您在该提示符下按空格键时,它会显示更多输出。由于权限,“终端长度0”在这种情况下不是一个选项。
非常感谢任何帮助。
编辑:
以下是输出结果:
router-2#show processes cpu history
History information for system:
111112222222222111111111122222111111111122222111111111111111
777770000000000999998888833333888889999900000999998888899999
100
90
80
70
60
50
40
30
20 ************************************************************
10 ************************************************************
0....5....1....1....2....2....3....3....4....4....5....5....
0 5 0 5 0 5 0 5 0 5
CPU% per second (last 60 seconds)
222222222222222222221222222222222222222222222222222222222222
342000300104111121019410422602031010060202210143001042120601
--More--
答案 0 :(得分:0)
我假设pexpect在最后一行之前超时,因为它期待#,而不是它正在另一个 - 更多 - ?认为你需要使用while循环,这样的事情可能是:
while count < 10:
output = child.readline()
if '--More--' in output:
child.sendline(' ')
elif '#' in output:
child.sendline('logout')
count +=1
time.sleep(1)
在每个循环之前睡一秒钟也很好,让终端有时间输出下一页。
希望得到这个帮助。
编辑:
嗯,这有点奇怪,期望和readline无法解析 - 更多 - 但它是在pexpect缓冲区,它看到它。我已经测试了这个,它起作用了我:
child.sendline('show processes cpu history')
count = 0
while count < 100:
output = child.readline().strip()
if '--More--' in child.buffer: ### read buffer like so
print output
child.sendline(' ')
elif '#' in output:
print 'done'
child.sendline('logout')
break
count +=1
如果您尝试打印child.buffer,您会注意到路由器终端发送了很多内容,因此您可能需要调整循环次数。
答案 1 :(得分:0)
对于偶然发现此线程的任何人,我过去通过首先发送命令来避免此问题:
terminal length 0
这会阻止设备对输出进行“分页”,以便您可以停止并阅读它。
该命令仅与您当前打开的会话相关,并在断开连接后消失。