如何在python串行通信中自动获取硬件的端口号?

2024-05-09 23:06:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个python图形用户界面,用于与某些硬件进行串行通信。我正在使用USB-RS232转换器。我不希望用户在设备管理器中查找硬件的com端口,然后在图形用户界面中选择port no进行通信。我的python代码如何自动获取该特定USB端口的端口号?我可以每次都把我的硬件连接到那个特定的地方,如果我在其他电脑上运行GUI会发生什么,你可以为此提出任何其他的解决方案。

提前谢谢!!!


Tags: 端口no代码用户com管理器硬件port
2条回答

pyserial可以列出端口及其USB VID:PID编号。

from serial.tools import list_ports
list_ports.comports()

此函数返回一个元组,第三个项是一个字符串,可能包含USB VID:PID号。你可以从那里分析。或者,您可以使用grep模块提供的list_ports函数:

list_ports.grep("6157:9988")

这个函数返回一个生成器对象,您可以遍历它。如果不太可能有两个设备连接到同一个VID:PID(我不这么认为,但出于测试目的,这是可以的),您可以这样做:

my_port_name = list(list_ports.grep("0483:5740"))[0][0]

list_ports的文档。

注意:我只在linux上测试过。pyserial文档警告说,在某些系统上,可能没有列出硬件ID。

我假设您正在设备管理器中专门寻找一个被描述为USB到RS232的COM端口,而不是想要列出所有可用的COM端口?

另外,您还没有提到您正在开发的操作系统,或者您正在使用的Python版本,但是对于使用Python 3.4的Windows系统,这一点对我很有用:

import serial.tools.list_ports

def serial_ports():

    # produce a list of all serial ports. The list contains a tuple with the port number, 
    # description and hardware address
    #
    ports = list(serial.tools.list_ports.comports())  

    # return the port if 'USB' is in the description 
    for port_no, description, address in ports:
        if 'USB' in description:
            return port_no

相关问题 更多 >