pyserial 列举端口
我需要列出或枚举现有的串口。到目前为止,我一直在使用这个方法enumerate_serial_ports(),但是在Windows 7上它不管用。你知道有什么替代的方法可以让我在Windows 7下找到可用的串口吗?
def enumerate_serial_ports():
""" Uses the Win32 registry to return an
iterator of serial (COM) ports
existing on this computer.
"""
path = 'HARDWARE\\DEVICEMAP\\SERIALCOMM'
try:
key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, path)
except WindowsError:
raise IterationError
for i in itertools.count():
try:
val = winreg.EnumValue(key, i)
yield str(val[1])
except EnvironmentError:
break
我遇到了迭代错误

3 个回答
1
下面是我写的一个辅助函数,用来打印可用的串口名称和描述,使用的是 serial
模块:
from serial.tools import list_ports
print(
"\n".join(
[
port.device + ': ' + port.description
for port in list_ports.comports()
]))
示例输出:
python.exe -u listSerialPorts.py
COM4: Sierra Wireless NMEA Port (COM4)
COM12: USB Serial Port (COM12)
COM10: USB Serial Port (COM10)
COM3: Intel(R) Active Management Technology - SOL (COM3)
COM5: Sierra Wireless DM Port (COM5)
16
现在,pyserial里面有一个叫做 list_ports 的模块。
In [26]: from serial.tools import list_ports
In [27]: list_ports.comports()
Out[27]:
[('/dev/ttyS3', 'ttyS3', 'n/a'),
('/dev/ttyS2', 'ttyS2', 'n/a'),
('/dev/ttyS1', 'ttyS1', 'n/a'),
('/dev/ttyS0', 'ttyS0', 'n/a'),
('/dev/ttyUSB0',
'Linux Foundation 1.1 root hub ',
'USB VID:PID=0403:6001 SNR=A1017L9P')]
这个模块也可以直接运行:
$ python -m serial.tools.list_ports
/dev/ttyS0
/dev/ttyS1
/dev/ttyS2
/dev/ttyS3
/dev/ttyUSB0
5 ports found
3
你在抛出一个叫做 IterationError
的错误,但这个错误其实并不存在。也许你应该考虑在这种情况下抛出 EnvironmentError
这个错误。
pySerial 的文档里有一些示例代码,可以帮助你找到串口。你可以去看看:http://pyserial.sourceforge.net/examples.html#finding-serial-ports