我已经在python中编写了一个小代码,以使用telnet库自动在多个Cisco路由器上进行配置任务。在第一次迭代中,一切正常,问题是我在函数read_all()的第二次迭代中超时。如果我从telnetlib.Telnet()函数中删除了超时参数,那么我将永远陷入同一迭代中。
from telnet import telnet
import xlrd
class handler:
excel_sheet=None
ipv4_devices=None
ipv6_devices=None
config=None
telnet=None
def __init__(self):
self.excel_sheet = xlrd.open_workbook("ipv4_devices.xlsx")
self.config=open("config.txt","r")
output_init = open("output.txt","w+")
output_init.write("")
output_init.close()
def execute(self):
row = None
column = None
self.ipv4_devices = self.excel_sheet.sheet_by_index(0)
for row in range(self.ipv4_devices.nrows-1):
self.telnet = telnet(self.ipv4_devices.cell_value(row+1,0),self.ipv4_devices.cell_value(row+1,1), self.ipv4_devices.cell_value(row+1,2), self.ipv4_devices.cell_value(row+1,3), self.config)
self.telnet.do_telnet()
self.telnet=None
self.config.close()
上面是我的Handler.py文件,该文件又调用了包含实际telnet代码的telnet.py文件。
import sys
import telnetlib
class telnet:
ipv4_address=None
port=0
username=None
passphrase=None
config=None
def __init__(self, ipv4_address=None, port=23, username=None, passphrase=None, config=None):
if (ipv4_address is not None) and (username is not None) and (passphrase is not None) and (config is not None) :
self.ipv4_address = ipv4_address
self.port = port
self.username = username
self.passphrase = passphrase
self.config = config
else:
exit()
def do_telnet(self):
output = open("output.txt","a")
remote= telnetlib.Telnet(self.ipv4_address,int(self.port))
remote.read_until("Username: ")
remote.write(self.username.encode('ascii')+"\n")
remote.read_until("Password: ")
remote.write(self.passphrase.encode('ascii')+"\n")
remote.write(self.config.read().encode('ascii')+"\n")
output.write(remote.read_all()+"\n"+" ------- "+"\n")
remote.close()
output.close()
以下是我超时时遇到的错误
Traceback (most recent call last):
File "Automate.py", line 5, in <module>
automate_it.execute()
File "/home/abdultayyeb/Desktop/Automation/handler.py", line 30, in execute
self.telnet.do_telnet()
File "/home/abdultayyeb/Desktop/Automation/telnet.py", line 31, in do_telnet
output.write(remote.read_all()+"\n"+" ------- "+"\n")
File "/usr/lib/python2.7/telnetlib.py", line 385, in read_all
self.fill_rawq()
File "/usr/lib/python2.7/telnetlib.py", line 576, in fill_rawq
buf = self.sock.recv(50)
socket.timeout: timed out
参考方案
我建议将其重写为使用netmiko,因为它将处理与Cisco IOS进行处理的特性。
关键是将设备类型指定为cisco_ios_telnet
。
在将系统转换为SSH时,这将具有额外的好处,即无需重新编写代码。您只需将设备类型从cisco_ios_telnet
更改为cisco_ios
https://pynet.twb-tech.com/blog/automation/netmiko.html
Python-crontab模块 - python我正在尝试在Linux OS(CentOS 7)上使用Python-crontab模块我的配置文件如下:{ "ossConfigurationData": { "work1": [ { "cronInterval": "0 0 0 1 1 ?", "attribute&…
Python Pandas导出数据 - python我正在使用python pandas处理一些数据。我已使用以下代码将数据导出到excel文件。writer = pd.ExcelWriter('Data.xlsx'); wrong_data.to_excel(writer,"Names which are wrong", index = False); writer.…
Python:在不更改段落顺序的情况下在文件的每个段落中反向单词? - python我想通过反转text_in.txt文件中的单词来生成text_out.txt文件,如下所示:text_in.txt具有两段,如下所示:Hello world, I am Here. I am eighteen years old. text_out.txt应该是这样的:Here. am I world, Hello old. years eighteen a…
每个文件合并后添加换行 - python我有很多类似以下内容的JSON文件:例如。1.json{"name": "one", "description": "testDescription...", "comment": ""} test.json{"name"…
用大写字母拆分字符串,但忽略AAA Python Regex - python我的正则表达式:vendor = "MyNameIsJoe. I'mWorkerInAAAinc." ven = re.split(r'(?<=[a-z])[A-Z]|[A-Z](?=[a-z])', vendor) 以大写字母分割字符串,例如:'我的名字是乔。 I'mWorkerInAAAinc”变成…