5

我需要列出或枚举现有串行端口,直到现在我一直在使用这种方法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

我得到迭代错误 在此处输入图像描述

4

3 回答 3

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
于 2012-06-30T04:50:48.080 回答
3

您正在提出一个IterationError,但该异常实际上并不存在。也许你也应该尝试EnvironmentError为这种情况加注。

pySerial 文档包含一些用于查找串行端口的示例代码。检查出来: http: //pyserial.sourceforge.net/examples.html#finding-serial-ports

于 2011-05-30T13:04:51.993 回答
1

您可以在下面找到我的辅助函数,使用该serial模块打印可用 com 端口的名称和描述:

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)
于 2016-06-14T15:18:44.390 回答