Pythonで利用可能なCOMポートを一覧表示する 質問する

Pythonで利用可能なCOMポートを一覧表示する 質問する

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())

おすすめ記事