1. 需要在代码开头导入ncclient库
  2. 在Device类中,cli.send()方法需要传入的是字符串,而不是列表中的元素,所以需要将COMMAND改为cmd
  3. 在open方法中,不需要再次调用_get_connect()方法获取连接,而是直接使用类属性self.client即可
  4. 在open方法中,COMMAND变量应该是执行命令后的返回值,而不是cli.send()方法的参数,所以需要将cli.send()方法的返回值赋值给COMMAND
  5. 在open方法中,应该先将命令逐个发送给设备,再执行exec_command()方法获取输出

修改后的代码如下:

from ncclient import manager import paramiko import time import datetime

定义设备IP地址、用户名和密码

DEVICE_IP = '10.1.0.6' USERNAME = 'python' PASSWORD = 'Huawei@123'

class Device(): def init(self, ip, usr, pwd): self.hostname = ip self.username = usr self.password = pwd self.client = self._get_connect() self.cli = self.client.invoke_shell() self.cli.send('n\n') self.cli.send('screen-length 0 temporary\n')

def _get_connect(self):
    ssh_con = paramiko.SSHClient()
    ssh_con.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh_con.connect(hostname=self.hostname, username=self.username, password=self.password,timeout=10)
    return ssh_con

def open(self):
    with open('command.txt', 'r') as f:
        cmd_list = f.readlines()
        for cmd in cmd_list:
            self.cli.send(cmd)
    time.sleep(1) # 等待命令执行完成
    COMMAND = self.cli.recv(65535).decode('utf-8') # 获取输出

    # 输出结果
    print(COMMAND)

    # 将结果写入文件
    timestamp = datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S')
    filename = f'{DEVICE_IP}_{timestamp}.txt'
    with open(filename, 'w') as f:
        f.write(COMMAND)

def close(self):
    self.client.close()

if name == 'main': device = Device(DEVICE_IP, USERNAME, PASSWORD) device.open() device.close(

对下面的代码改错优化from ncclient import managerimport paramikoimport timeimport datetime# 定义设备IP地址、用户名和密码DEVICE_IP = 10106USERNAME = pythonPASSWORD = Huawei123class Device def __init__self ip usr pwd

原文地址: https://www.cveoy.top/t/topic/fbxD 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录