【发布时间】:2020-08-06 07:46:15
【问题描述】:
我正在编写一个脚本以从 GNS3 中的 Cisco 设备中提取配置。由于另一个单独的问题,目前它正在使用硬编码的 IP 和端口,但这是我目前正在使用的代码。
import getpass
import telnetlib
print "Getting running-config 127.0.0.1:5002"
tn = telnetlib.Telnet("127.0.0.1","5002")
tn.write("terminal length 0\n")
tn.write("show run\n")
tn.write("exit\n")
readoutput = tn.read_until("exit")
saveoutput = open("C:\Programdata\switch.txt","w")
saveoutput.write(readoutput)
saveoutput.write("\n")
saveoutput.close
print tn.read_all()
如果我注释掉 readouput 和 saveoutput 代码块,脚本会以我预期的速度运行。然而,一旦我把那个代码留在里面,它就会挂起。我已将 print() 命令放入以进行验证,它挂在 readoutput 行上。我试过tn.read_all 和tn.read_until (不带和不带字符串参数),但都不起作用。
即使读取输出不工作,我也知道发生了一些事情,因为如果我在命令提示符下使用telnet 127.0.0.1 5002 telnet 进入交换机,它会毫无问题地出现,并且能够通过我的终端命令进行。
编辑:
我今天对此进行了更多测试,并通过使用大量睡眠定时器并打印到终端发现了发生了什么。事实证明,由于某种原因,telnet 会话实际上并没有按回车键。我尝试将tn.write("text\n") 更改为tn.write("text" + "\n"),甚至将其拆分为两个写命令,但都不起作用。下面是我在尝试使脚本工作失败后打开的 telnet 会话。注意所有的命令都排在那里?如果我将读取输出更改为查找“xit”,它是 ios 控制台第一行上的文本,那么它将在 telnet 中找到它并打印 telnet 会话中的所有内容。
如果有人知道为什么"\n" 实际上没有按回车键,我将非常感谢您的帮助,因为这应该是我使该脚本成为工作的一部分的最后一个主要障碍。
【问题讨论】:
标签: python python-3.x telnetlib cisco-ios