被 Python 中的 read_all() 函数困住了?

我在 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()



扬帆大鱼
浏览 386回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python