python:如何检测串行COM上的设备名称/ ID

时间:2011-10-13 15:38:01

标签: python serial-port

我想知道如何在python中执行此操作:

  • 在串口com中识别名为特定名称的端口(\ Device \ VCP0和\ Device \ VCP1,这些是通过在regedit窗口中浏览获得的)

  • 获取插入设备的ID

我已经可以通过这个扫描活动串口COM

的pySerial代码识别出可用的COM
import serial

def scan():
    """scan for available ports. return a list of tuples (num, name)"""
    available = []
    for i in range(256):
        try:
            s = serial.Serial(i)
            available.append( (i, s.portstr))
            s.close()   # explicit close 'cause of delayed GC in java
        except serial.SerialException:
            pass
    return available

if __name__=='__main__':
    print "Found ports:"
    for n,s in scan():
        print "(%d) %s" % (n,s)

提前致谢

3 个答案:

答案 0 :(得分:4)

我不确定您使用的操作系统,但这是在Win7-x64

import win32com.client
wmi = win32com.client.GetObject("winmgmts:")
for serial in wmi.InstancesOf("Win32_SerialPort"):
       print (serial.Name, serial.Description)

使用此信息,您可以解析它并获取COM编号。 您可以在此处获取Serial实例的其他属性: http://msdn.microsoft.com/en-us/library/aa394413(v=vs.85).aspx

答案 1 :(得分:1)

两个回答

1)因为这依赖于可用的硬件,所以测试代码完全可以在其编写的环境中工作,但在您的环境中不起作用 - 如果您在Windows上,则可能很有可能这是在Linux上编写的。代码使用端口0 - 不知道如何映射到COM1等。

2)在Windows上,COM端口曾经有DOS名称,如COM1,COM2 - 即一个字符串,而不是一个int(它们不像TCP / IP端口号)。最近在Windows中有\。\ COMnotanumber格式,允许更通用的名称,我已经看到这些由USB转串口转换器使用。在serialutil.py中快速查看了pyserial SerialBase的源代码,它有点奇怪的IMO,因为只有在通过调用self.port(portname)使用显式端口设置时才会设置AFAICT self.name。您可能希望尝试使用serport = Serial(0)初始化串行端口实例,然后显式调用serport.port(' COM1')(或者您的端口名称而不是COM1)。

刚刚更正了代码。它的工作正常...... :)

import serial

def scan():
    available = []
    for i in range(256):
        try:
            s = serial.Serial('COM'+str(i))
            available.append( (s.portstr))
            s.close()   # explicit close 'cause of delayed GC in java
        except serial.SerialException:
            pass

    for s in available:
        print "%s" % (s)


if __name__=='__main__':
    print "Found ports:"
    scan()

答案 2 :(得分:1)

如果您使用的是USB转TTY串行适配器,则设备驱动程序文件的唯一符号链接将显示在/ dev / serial / by-id中。只有在插入串行设备时才会显示该文件夹。显示的文件名是根据设备上USB接口芯片中的产品信息创建的,对于该设备而言是唯一的。 例如,Korad KD3005P可编程电源将显示为usb-Nuvoton_USB_Virtual_COM_A92014090305-if00。符号链接将解析为'/../../ttyACM0'。然后,所需的设备驱动器文件为“/ dev / ttyACM0”。