我有一个脚本(Windows 7,Python 2.7)来列出串口,但我正在寻找一个具有特定名称的设备。 我的剧本:
import serial.tools.list_ports
ports = list(serial.tools.list_ports.comports())
for p in ports:
print(p)
返回:
COM3 - Intel(R) Active Management Technology - SOL (COM3)
COM6 - MyCDCDevice (COM6)
COM1 - Communications Port (COM1)
>>>
大!但是,我希望这个脚本能够自动从群中挑选出MyCDCDevice并连接到它。 我试过了:
import serial.tools.list_ports
ports = list(serial.tools.list_ports.comports())
for p in ports:
if 'MyCDCDevice' in p:
print(p)
// do connection stuff to COM6
但这不起作用。我怀疑因为p不是一个字符串,而是一种某种对象?
无论如何,正确的方法是什么?
谢谢!
答案 0 :(得分:3)
我知道这篇文章已经很老了,但我想我会发布我的发现,因为没有被接受的#39;回答(迟到总比没有好)。
This documentation帮助确定了对象的成员,我最终找到了这个解决方案。
import serial.tools.list_ports
ports = list(serial.tools.list_ports.comports())
for p in ports:
if 'MyCDCDevice' in p.description:
print(p)
# Connection to port
s = serial.Serial(p.device)
答案 1 :(得分:1)
为了进一步扩展这一点,我发现使用相关设备的PID和VID更安全。
import serial.tools.list_ports
# FTDI FT232 device (http://www.linux-usb.org/usb.ids)
pid="0403"
hid="6001"
my_comm_port = None
ports = list(serial.tools.list_ports.comports())
for p in ports:
if pid and hid in p.hwid:
my_comm_port = p.device
更好的是,您可以使用设备的序列号进行查找,以防万一您插入了相同的设备。
(Source)
答案 2 :(得分:0)
您可以使用serial.tools.list_ports.grep
,它会为您搜索所有说明字段。例如:
from serial.tools import list_ports
try:
cdc = next(list_ports.grep("MyCDCDevice"))
# Do connection stuff on cdc
except StopIteration:
print "No device found"
如果这不起作用,您可以尝试在传递给*
的字符串的末尾添加grep
,以防描述符中有额外的字符。