使用 pyserial 识别给定 USB VID 和 PID 的 USB 到串行端口
Posted
技术标签:
【中文标题】使用 pyserial 识别给定 USB VID 和 PID 的 USB 到串行端口【英文标题】:Identifying USB to serial port given USB VID and PID using pyserial 【发布时间】:2016-01-23 18:48:01 【问题描述】:我是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 序列号等。
【问题讨论】:
您可以尝试更新版本的 pyserial。在版本 3.0.1serial.tools.list_ports.comports()
中,返回的 serial.tools.list_ports.ListPortInfo
具有属性 pid
、vid
和 serial_number
。
我正在使用 Django==1.8 Markdown==2.4.1 mysql-python==1.2.5 Pillow==2.5.3 Pygments==1.6 argparse==1.2.1 bootstrap-admin== 0.3.6 django-braces==1.4.0 django-filter==0.7 django-oauth-toolkit==0.7.2 feedparser==5.1.3 gunicorn==19.1.1 oauthlib==0.6.3 pyserial==3.0。 1 python-gcm==0.2 requests==2.2.1 六==1.7.3 wsgiref==0.1.2 然后给出错误:- Traceback(最近一次调用最后):文件“/var/www/html/django/sms /test/usb_info.py",第 3 行,在 正如@Peter 在评论中所说,在较新版本的 PySerial(当前是 3.4)中,您可以轻松获取端口信息,例如描述、PID、VID、HWID、名称、序列号等。
例如:
for port in serial.tools.list_ports.comports():
print(port.hwid)
【讨论】:
以上是关于使用 pyserial 识别给定 USB VID 和 PID 的 USB 到串行端口的主要内容,如果未能解决你的问题,请参考以下文章