본문 바로가기
파이썬

파이썬 Windows에서 직렬 (COM) 포트를 나열 하시겠습니까?

by º기록 2021. 2. 10.
반응형


현재 두 가지 다른 접근 방식을 알고 있습니다.

HARDWARE \\ DEVICEMAP \\ SERIALCOMM 레지스트리 키의 정보를 읽습니다. 좋은 옵션처럼 보이지만 강력한 인가요? 온라인이나 MSDN에서이 레지스트리 셀이 사용 가능한 포트의 전체 목록을 항상 보유하고 있다는 보장을 찾을 수 없습니다.

COMN CreateFile 을 1에서 어떤 숫자까지 N으로 호출하려고합니다. 일부 COM 포트의 이름이 COMN이 아니기 때문에 이것만으로는 충분하지 않습니다. 예를 들어 생성 된 일부 가상 COM 포트의 이름은 CSNA0, CSNB0 등이므로이 방법에 의존하지 않습니다.

공유 할 다른 방법 / 아이디어 / 경험이 있습니까?

수정 : 그런데 다음은 레지스트리에서 포트 이름을 읽는 간단한 Python 구현입니다.

import _winreg as winreg
import itertools


def enumerate_serial_ports():
    """ Uses the Win32 registry to return a 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]), str(val[0]))
        except EnvironmentError:
            break

 

해결 방법

 

몇 가지 옵션을 사용할 수 있습니다.





 

참조 페이지 https://stackoverflow.com/questions/1205383

 

 

반응형

댓글