使用 Python 列出可用的 com 端口

新手上路,请多包涵

我正在寻找一种简单的方法来列出 PC 上所有可用的 com 端口。

我找到了这种方法,但它是特定于 Windows 的: Listing serial (COM) ports on Windows?

我在 Windows 7 PC 上使用 Python 3 和 pySerial。

我在 pySerial API ( http://pyserial.sourceforge.net/pyserial_api.html ) 中找到了一个函数 serial.tools.list_ports.comports() 列出了 com 端口(正是我想要的)。

 import serial.tools.list_ports
print(list(serial.tools.list_ports.comports()))

但是好像不行。当我的 USB 到 COM 网关连接到 PC 时(我在设备管理器中看到 COM5),此 COM 端口不包含在 list_ports.comports() 返回的列表中。相反,我只得到似乎连接到调制解调器的 COM4(我在设备管理器的 COM&LPT 部分没有看到它)!

你知道为什么它不起作用吗?您是否有其他非系统特定的解决方案?

原文由 doom 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
1 个回答

这是我使用的代码。

使用 Python 2 和 Python 3 在 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 上成功测试。

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

原文由 tfeldmann 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题