1. 在代码中没有定义netconf变量,需要将netconf的值赋给该变量。
  2. 在执行命令方法中,应该先判断是否连接成功,如果未连接则先连接,如果已经连接则不需要再连接。
  3. 在执行命令方法中,应该先判断命令文件是否存在,如果不存在则应该提示用户。
  4. 在执行命令方法中,应该将输出结果保存到变量中,而不是直接输出。
  5. 应该在程序最后断开SSH连接。

优化后的代码如下:

import paramiko

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

Dev_ip = '10.1.0.6' Dev_usr = 'python' Dev_pwd = 'Huawei@123' Net_usr = 'ncclient' Net_pwd = 'Huawei@123' netconf = 'system-view\nnetconf\nprotocol inbound ssh port 830\ncommit\nquit\n' Commands = 'command.txt'

class HuaweiDevice(): # 初始化华为设备类,需要传入设备的IP地址、用户名和密码 def init(self, ip, username, password): self.ip = ip self.username = username self.password = password self.ssh = None # SSH连接对象

# SSH连接方法
def connect_ssh(self):
    self.ssh = paramiko.SSHClient() # 创建SSH客户端对象
    self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 自动添加新主机的密钥
    self.ssh.connect(self.ip, username=self.username, password=self.password) # SSH连接

# SSH断开连接方法
def disconnect_ssh(self):
    if self.ssh: # 如果已经连接,则关闭连接
        self.ssh.close()
        self.ssh = None

# SSH执行命令方法
def enable_netconf(self):
    if not self.ssh: # 如果未连接,则先连接
        self.connect_ssh()
    # 发送命令,启动Netconf功能
    stdin, stdout, stderr = self.ssh.exec_command(netconf)
    # 输出命令的执行结果
    print(stdout.read().decode())
    self.disconnect_ssh()

def status(self):
    if not self.ssh: # 如果未连接,则先连接
        self.connect_ssh()
    try:
        with open(Commands, 'r') as f:
            commands = f.readlines()
    except FileNotFoundError:
        print('命令文件不存在,请检查!')
        return
    output = ''
    for command in commands:
        command = command.strip()
        if command:
            stdin, stdout, stderr = self.ssh.exec_command(command)
            output += f'执行命令:{command}\n{stdout.read().decode()}\n{stderr.read().decode()}\n'
    print(output)
    self.disconnect_ssh()

if name == 'main': device = HuaweiDevice(ip=Dev_ip, username=Dev_usr, password=Dev_pwd) #device.enable_netconf() device.status(

对下面的代码排错并优化import paramikoimport time# 设备的IP地址、用户名和密码Dev_ip = 10106Dev_usr = pythonDev_pwd = Huawei123Net_usr = ncclientNet_pwd = Huawei123netconf = system-viewnnetconfnprotocol inbound ssh port 830nc

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

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