如何使用netmiko连接串口?

时间:2018-02-13 04:55:15

标签: python networking

我正在尝试连接到串口(COM7),但似乎无法正常工作。 也许我在设备中做了错误的描述。 有人可以帮帮我吗?

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'

这是错误

{{1}}

3 个答案:

答案 0 :(得分:0)

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

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

我没有要测试的串行设备,但是在查找COM端口时出错。

ValueError: device COM7 not found.

而不是期望一个整数。

来自netmiko源的serial_settings的默认值为:

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

来自https://github.com/ktbyers/netmiko/blob/develop/netmiko/base_connection.py

答案 1 :(得分:0)

感谢您使用serial_settings的想法。 但是,下面的serial_settings还有一些其他错误; 仅供参考,我可以使用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'

答案 2 :(得分:0)

check_serial_port函数中存在一个错误,该错误试图拆分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