python 实现读取多个文件进行配置多个网络设备

原理:

       将设备的配置文件,放到同目录下,然后将ip_add、username、passwd、path属性放入字典,写入device_info.py文件,并用datebase列表来接收字典。

        在脚本中导入device_info库,最外层嵌套一个循环用来遍历datebase列表,用来实现对不同文件的遍历读取,然后在ssh连接时需要属性时,调用datebase中元素的键,从而实现对不同文件的读取。

        代码不理解,可以去读上一篇文章,实际上就是将上篇文章中的固定变量,设置为灵活变量,以便调用不同文件

 

device_info.py:

# 需要一个数据库,存储着 各个设备的信息
dict_sw1 = {"ip_add": "192.168.19.10", "username": "zhangxiong", "passwd": "huawei@123", "path": "sw1.cfg"}
dict_sw2 = {"ip_add": "192.168.19.20", "username": "zhangxiong", "passwd": "huawei@123", "path": "sw2.cfg"}
dict_sw3 = {"ip_add": "192.168.100.30", "username": "zhangxiong", "passwd": "huawei@123", "path": "sw3.cfg"}
datebase = [dict_sw1, dict_sw2]

 python代码实现:

import paramiko
import time
from device_info import *


for item in range(len(datebase)):
    # 1.创建客户端对象
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 使用客户端,导入参数
    ssh.connect(hostname=datebase[item]["ip_add"], username=datebase[item]["username"], password=datebase[item]["passwd"])
    command = ssh.invoke_shell()  # 创建一个命令对象 ,调用shell

    with open(f'{datebase[item]["path"]}', 'r', encoding='utf-8') as f:
        while True:
            content = f.readline()  # 将读取到的文件,按行,存储为一个列表
            if not content:
                break
            command.send(content.encode())

    print("please wait ....")
    time.sleep(5)  # 发送完命令,需要一个延时,等待设备 将回显值回传,等待时间不能太短
    output = command.recv(65535)  # 接收服务器的返回数据
    print(output.decode())  # 将接收的数据解码

    ssh.close()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以提供一个简单的 Python 网络设备配置文件自动评判系统的代码。 首先,你需要准备好网络设备配置文件和参考配置文件。将它们存储在一个文件中。例如,假设你有一个名为 `testcases.txt` 的文件,其中包含了多个测试用例和参考配置文件,格式如下: ``` Test case 1: Config file: test1.cfg Reference file: ref1.cfg Test case 2: Config file: test2.cfg Reference file: ref2.cfg ... ``` 接下来,你可以使用 Python文件读取操作来读取这个文件,然后逐个测试每个用例并计算得分。具体实现如下: ```python import difflib def compare_configs(config_str, reference_str): # 将配置文件和参考文件分别按行拆分成列表 config_lines = config_str.strip().split('\n') reference_lines = reference_str.strip().split('\n') # 使用 difflib 模块计算行级别的差异 differ = difflib.Differ() diff = list(differ.compare(config_lines, reference_lines)) # 计算得分 score = 1.0 - float(len([line for line in diff if line.startswith('-') or line.startswith('+')])) / len(reference_lines) return score def grade_testcases(testcases_file, student_func): total_score = 0.0 num_testcases = 0 with open(testcases_file, 'r') as f: lines = f.readlines() i = 0 while i < len(lines): # 读取测试用例和参考配置文件 config_file = '' reference_file = '' while i < len(lines) and not lines[i].startswith('Test case'): if lines[i].startswith('Config file:'): config_file = lines[i][len('Config file:'):].strip() elif lines[i].startswith('Reference file:'): reference_file = lines[i][len('Reference file:'):].strip() i += 1 # 跳过空行 i += 1 # 读取学生配置文件并获取得分 with open(config_file, 'r') as f: student_config_str = f.read() with open(reference_file, 'r') as f: reference_config_str = f.read() score = compare_configs(student_config_str, reference_config_str) # 更新总分和测试用例数 total_score += score num_testcases += 1 # 计算平均分 if num_testcases > 0: average_score = total_score / num_testcases return average_score else: return 0.0 ``` 在上面的代码中,`compare_configs()` 函数用于比较学生提交的配置文件和参考配置文件,并计算得分。`grade_testcases()` 函数用于读取测试用例文件并逐个运行测试用例。 你需要将你想要测试的学生代码作为一个参数传递给 `grade_testcases()` 函数,并确保学生代码的输入和输出格式与测试用例文件中的格式一致。 最后,你可以调用 `grade_testcases()` 函数来计算学生代码的得分。得分将基于测试用例的正确性和数量进行计算。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值