Создание нескольких выходных файлов для нескольких входных файлов при выполнении telnet
Эксперты,
Запросите поддержку, чтобы исправить эту проблему и расположить код(python2.6) в правильной последовательности
У меня есть несколько входных файлов, из которых мне нужно прочитать значение третьего столбца и передать его команде("show run interface gigabitEthernet %s\r\n" % data), присутствующей внутри скрипта, который выполняет telnet и извлечение данных. У меня также есть один файл, который содержит список IP-адресов, которые будут использоваться для устройства telnet один за другим. Требуется несколько выходных файлов для каждого входного файла.
Передача значения в этой команде внутри скрипта:
show run interface gigabitEthernet %s\r\n"
Проблема : скрипт не может генерировать несколько выходных файлов для нескольких входных файлов.
Выходные данные для всех входных файлов генерируются в одном выходном файле 'result_s'
Имейте несколько входных файлов, содержащих данные, как показано ниже :
Файл 1:
Sessions,CPU,facility 43,17104773,1 45,17104234,2
Файл 2:
Sessions,CPU,facility 43,17104773,3 45,17104234,4
Нужен вывод по другому пути в отдельном файле для каждого входного файла
Что я уже пробовал:
<pre lang="Python">
#!/usr/bin/env python import sys import telnetlib import os import subprocess import csv import os import logging # This is the main logger object to be used throughout the script logger = None # Create the necessary log handles # A log file is created with the filename specified # Other log messages are also printed on the console as per the level def createLogHandlers(logfile): global logger logging.basicConfig(filename=logfile , filemode='a', level=logging.DEBUG, format='%(asctime)s %(levelname)-8s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S') logger = logging.getLogger('Telnet') # Create handler which logs messages on console log_console = logging.StreamHandler() log_console.setLevel(logging.DEBUG) log_console.setFormatter(logging.Formatter('%(asctime)s %(levelname)-8s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S')) logger.addHandler(log_console) # Global Objects COLUMN_DATA = [] PATHSTR = "/tmp/input" os.chdir (PATHSTR) ''' This will extract data from all the files with filename pattern "aa<number>" present in the PATHSTR ''' def extract_column_data(): global COLUMN_DATA fileCount = 1 for file in os.listdir(PATHSTR): if file.startswith("aa"): logger.info("Reading from file %s, file counter = %d" % (file, fileCount)) fileCount += 1 infile = open(file) outfile = open('out_%d.txt' % fileCount, 'wb') csvreader = csv.DictReader(infile) csvwriter = csv.writer(outfile) for row in csvreader: # store the data in memory COLUMN_DATA.append(row['facility']) # Write the data to storage csvwriter.writerow(row['facility']) infile.close() outfile.close() def my_function(device): global COLUMN_DATA f = open('result_S', 'w') user = "abc" password = "abc" try: # TELNET TO DEVICE telnet = telnetlib.Telnet(device) telnet.read_until('username: ', 3) telnet.write(user + '\r') telnet.read_until('password: ', 3) telnet.write(password + '\r') telnet.write("term len 0" + "\r\n") response = telnet.read_until('IST', timeout=5) logger.info("Logged into device ip = %s successfully" % device) for data in COLUMN_DATA: logger.info("Checking show run for interface %s" % data) telnet.write("show run interface gigabitEthernet %s\r\n" % data) response = telnet.read_until('S', timeout=5) logger.debug("Received response:\n%s " % response) f.write('\n' + str(device) + "\t" + "response:" + "\t" + response) telnet.write('\r\r') telnet.write('\r\r') #telnet.write('exit' + '\r') except NameError: logger.error("Script ERROR") except: logger.error("Telnet Failed") finally: f.close( ) ### MAIN FUNCTION ### if __name__ == "__main__": createLogHandlers('telnet_b.log') extract_column_data() IP_address = open("IP_file", "r") logger.info("Reading from file %s" % IP_address.name) for device in IP_address: logger.debug("Parsed device=%s" % device) logger.info("Running ping against device=%s" % device) res = subprocess.call(['ping', '-c', '2', device]) if res == 0: logger.debug("Ping to device=%s successfull" % device) logger.info("Initating show run collection on device=%s" % device) my_function(device) else: print logger.warning("Ping to device=%s failed" % device)