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

私は IterationError を取得します ここに画像の説明を入力

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 に答える