使用pyserial识别给定USB VID和PID的USB到串行端口

时间:2016-01-23 18:48:02

标签: python python-2.7 python-3.x pyserial usbserial

我是python中的新学习者。我想创建一个用于发送短信或使用数据卡呼叫的Web应用程序。我一直在使用数据卡发送短信,但我的问题是,如果我一次使用多个数据卡连接如何检查哪个USB端口工作正常。所以我想获取usb序列号或usb pid或vid。

import serial.tools.list_ports;
reslt =  serial.tools.list_ports.comports()
print serial.tools.list_ports.ListPortInfo.name

结果:

[('/dev/ttyS31', 'ttyS31', 'n/a'), ('/dev/ttyS30', 'ttyS30', 'n/a'),
 ('/dev/ttyS29', 'ttyS29', 'n/a'), ('/dev/ttyS28', 'ttyS28', 'n/a'),
 ('/dev/ttyS27', 'ttyS27', 'n/a'), ('/dev/ttyS26', 'ttyS26', 'n/a'),
 ('/dev/ttyS25', 'ttyS25', 'n/a'), ('/dev/ttyS24', 'ttyS24', 'n/a'),
 ('/dev/ttyS23', 'ttyS23', 'n/a'), ('/dev/ttyS22', 'ttyS22', 'n/a'),
 ('/dev/ttyS21', 'ttyS21', 'n/a'), ('/dev/ttyS20', 'ttyS20', 'n/a'),
 ('/dev/ttyS19', 'ttyS19', 'n/a'), ('/dev/ttyS18', 'ttyS18', 'n/a'),
 ('/dev/ttyS17', 'ttyS17', 'n/a'), ('/dev/ttyS16', 'ttyS16', 'n/a'),
 ('/dev/ttyS15', 'ttyS15', 'n/a'), ('/dev/ttyS14', 'ttyS14', 'n/a'),
 ('/dev/ttyS13', 'ttyS13', 'n/a'), ('/dev/ttyS12', 'ttyS12', 'n/a'),
 ('/dev/ttyS11', 'ttyS11', 'n/a'), ('/dev/ttyS10', 'ttyS10', 'n/a'),
 ('/dev/ttyS9', 'ttyS9', 'n/a'), ('/dev/ttyS8', 'ttyS8', 'n/a'),
 ('/dev/ttyS7', 'ttyS7', 'n/a'), ('/dev/ttyS6', 'ttyS6', 'n/a'),
 ('/dev/ttyS5', 'ttyS5', 'n/a'), ('/dev/ttyS4', 'ttyS4', 'n/a'),
 ('/dev/ttyS3', 'ttyS3', 'n/a'), ('/dev/ttyS2', 'ttyS2', 'n/a'),
 ('/dev/ttyS1', 'ttyS1', 'n/a'), ('/dev/ttyS0', 'ttyS0', 'n/a'),
 ('/dev/ttyUSB3', 'Huawei Technologies Co., Ltd. Modem/Networkcard ',
  'USB VID:PID=12d1:1506'),
 ('/dev/ttyUSB2', 'Huawei Technologies Co., Ltd. Modem/Networkcard ',
  'USB VID:PID=12d1:1506'),
 ('/dev/ttyUSB0', 'Huawei Technologies Co., Ltd. Modem/Networkcard ',
  'USB VID:PID=12d1:1506')]

import serial.tools.list_ports;
print [port for port in serial.tools.list_ports.comports() if port[2] != 'n/a']

结果:

[('/dev/ttyUSB3', 'Huawei Technologies Co., Ltd. Modem/Networkcard ',
  'USB VID:PID=12d1:1506'),
 ('/dev/ttyUSB2', 'Huawei Technologies Co., Ltd. Modem/Networkcard ',
  'USB VID:PID=12d1:1506'),
 ('/dev/ttyUSB0', 'Huawei Technologies Co., Ltd. Modem/Networkcard ',
  'USB VID:PID=12d1:1506')]

我正在学习http://pyserial.readthedocs.org/en/latest/tools.html

请帮助我如何获得usb VID,Usb序列号等。

2 个答案:

答案 0 :(得分:2)

正如@Peter在评论中所说,在较新版本的PySerial(当前版本为3.4)中,您可以轻松获取端口信息,例如描述,PID,VID,HWID,名称,序列号等。

例如:

for port in serial.tools.list_ports.comports():
    print(port.hwid)

答案 1 :(得分:1)

获取VID或PID:

  1. 转到“设备管理器”
  2. USB串行总线控制器
  3. 单击所需设备,然后右键单击转到 物业
  4. 点击下拉菜单中的详细信息标签 设备实例路径