Python 如何使用netmiko连接串行端口?

Python 如何使用netmiko连接串行端口?,python,networking,Python,Networking,我试图连接到串行端口(COM7),但似乎无法工作。 也许我在设备中做了错误的描述。 有人能帮我吗 from __future__ import absolute_import, division, print_function import netmiko device = { "device_type": "cisco_ios_serial", "port": "COM7", "username": "admin", "password": "", "secret": "secret" }

我试图连接到串行端口(COM7),但似乎无法工作。 也许我在设备中做了错误的描述。 有人能帮我吗

from __future__ import absolute_import, division, print_function
import netmiko

device = {
"device_type": "cisco_ios_serial",
"port": "COM7",
"username": "admin",
"password": "",
"secret": "secret"
}

conn = netmiko.ConnectHandler(**device)
conn.enable()
output = conn.send_config_set([
        'no service dhcp',
        'service dhcp',
        'ip dhcp option format circuit_id',
        'attr 3 type 0 length-hidden 6 value string 2412533'])
print(output)
conn.disconnect()
这里是错误

Traceback (most recent call last):
  File "test.py", line 12, in <module>
    conn = netmiko.ConnectHandler(**device)
  File "C:\Python\Python27\lib\site-packages\netmiko\ssh_dispatcher.py", line 173, in ConnectHandler
    return ConnectionClass(*args, **kwargs)
  File "C:\Python\Python27\lib\site-packages\netmiko\base_connection.py", line 117, in __init__
    self.port = int(port)
ValueError: invalid literal for int() with base 10: 'COM7'
回溯(最近一次呼叫最后一次):
文件“test.py”,第12行,在
conn=netmiko.ConnectHandler(**设备)
ConnectHandler中的文件“C:\Python\Python27\lib\site packages\netmiko\ssh\u dispatcher.py”,第173行
返回ConnectionClass(*args,**kwargs)
文件“C:\Python\Python27\lib\site packages\netmiko\base\u connection.py”,第117行,在\uu init中__
self.port=int(端口)
ValueError:基数为10的int()的文本无效:“COM7”

串行设置在设备定义的串行设置中指定

device = {
"device_type": "cisco_ios_serial",
"username": "admin",
"password": "",
"secret": "secret",
"serial_settings": {"port": "COM7"}
}
我没有要测试的串行设备,但在查找COM端口时出错

ValueError: device COM7 not found.
而不是期望一个整数

netmiko源的串行_设置的默认值为:

    self.serial_settings = {
        'port': 'COM1',
        'baudrate': 9600,
        'bytesize': serial.EIGHTBITS,
        'parity': serial.PARITY_NONE,
        'stopbits': serial.STOPBITS_ONE
    }

感谢您提出使用串行设置的想法。 但是,下面的串行_设置还有一些其他错误; 仅供参考,我可以使用USB控制台访问COM7,但出现了错误

Traceback (most recent call last):
  File "d:\Programming\GTAC\test_automation\test\robot_test\test.py", line 15, in <module>
    conn = netmiko.ConnectHandler(**device)
  File "C:\Python\Python27\lib\site-packages\netmiko\ssh_dispatcher.py", line 173, in ConnectHandler
    return ConnectionClass(*args, **kwargs)
  File "C:\Python\Python27\lib\site-packages\netmiko\base_connection.py", line 146, in __init__
    comm_port = check_serial_port(comm_port)
  File "C:\Python\Python27\lib\site-packages\netmiko\utilities.py", line 173, in check_serial_port
    return cdc.split()[0]
AttributeError: 'ListPortInfo' object has no attribute 'split'
回溯(最近一次呼叫最后一次):
文件“d:\Programming\GTAC\test\u automation\test\robot\u test\test.py”,第15行,在
conn=netmiko.ConnectHandler(**设备)
ConnectHandler中的文件“C:\Python\Python27\lib\site packages\netmiko\ssh\u dispatcher.py”,第173行
返回ConnectionClass(*args,**kwargs)
文件“C:\Python\Python27\lib\site packages\netmiko\base\u connection.py”,第146行,在\uu init中__
通信端口=检查串行端口(通信端口)
文件“C:\Python\Python27\lib\site packages\netmiko\utilities.py”,第173行,在check\u serial\u port中
返回cdc.split()[0]
AttributeError:'ListPortInfo'对象没有属性'split'
尝试拆分ListPortInfo对象的函数中存在错误。 快速解决方案是猴子补丁,如下所示:

import netmiko
import serial.tools.list_ports

def my_check_serial_port(name):
    """returns valid COM Port."""
    try:
        cdc = next(serial.tools.list_ports.grep(name))
        return cdc.__str__().split()[0]
    except StopIteration:
        msg = "device {} not found. ".format(name)
        msg += "available devices are: "
        ports = list(serial.tools.list_ports.comports())
        for p in ports:
            msg += "{},".format(str(p))
        raise ValueError(msg)

netmiko.base_connection.check_serial_port = my_check_serial_port

看起来端口应该是一个数字。从2019年9月7日起,
端口
不在
串行设置
范围内。请检查