PC 上で利用可能なすべての COM ポートを一覧表示する簡単な方法を探しています。
この方法を見つけましたが、これは Windows 固有です:Windows でシリアル (COM) ポートを一覧表示しますか?
私は Windows 7 PC で pySerial と Python 3 を使用しています。
私はpySerial API(pyserial.sourceforge.net よりserial.tools.list_ports.comports()
) COM ポートを一覧表示する関数(まさに私が求めていたもの)。
import serial.tools.list_ports
print(list(serial.tools.list_ports.comports()))
しかし、動作しないようです。USB to COM ゲートウェイが PC に接続されている場合 (デバイス マネージャーで COM5 が表示されます)、この COM ポートは によって返されるリストに含まれていませんlist_ports.comports()
。代わりに、モデムに接続されていると思われる COM4 のみが表示されます (デバイス マネージャーの COM&LPT セクションには表示されません)。
なぜ機能しないのかご存知ですか? システム固有ではない別の解決策はありますか?
ベストアンサー1
これは私が使用するコードです。
Windows 8.1 x64、Windows 10 x64、Mac OS X 10.9.x / 10.10.x / 10.11.x、Ubuntu 14.04 / 14.10 / 15.04 / 15.10 で、Python 2 と Python 3 の両方を使用して正常にテストされました。
import sys
import glob
import serial
def serial_ports():
""" Lists serial port names
:raises EnvironmentError:
On unsupported or unknown platforms
:returns:
A list of the serial ports available on the system
"""
if sys.platform.startswith('win'):
ports = ['COM%s' % (i + 1) for i in range(256)]
elif sys.platform.startswith('linux') or sys.platform.startswith('cygwin'):
# this excludes your current terminal "/dev/tty"
ports = glob.glob('/dev/tty[A-Za-z]*')
elif sys.platform.startswith('darwin'):
ports = glob.glob('/dev/tty.*')
else:
raise EnvironmentError('Unsupported platform')
result = []
for port in ports:
try:
s = serial.Serial(port)
s.close()
result.append(port)
except (OSError, serial.SerialException):
pass
return result
if __name__ == '__main__':
print(serial_ports())