Python으로 사용 가능한 com 포트 텍스트
PC에서 사용 가능한 모든 COM 포트를 사용하는 간단한 방법을 찾고 있습니다.
이 방법을 찾았지만 Windows 전용입니다. Windows에서 일련의 (COM) 포트 그래픽?
Windows 7 PC에서 pySerial과 함께 Python 3을 사용하고 있습니다.
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 섹션에는 표시됩니다)!
왜 작동하지 않는지 아십니까? 특정 시스템이 아닌 다른 솔루션이 있습니까?
이것이 제가 사용하는 코드입니다.
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())
당신이 사용할 수있는 :
python -c "import serial.tools.list_ports;print serial.tools.list_ports.comports()"
기기 포트로 필터링 : python -c "import serial.tools.list_ports;print [port for port in serial.tools.list_ports.comports() if port[2] != 'n/a']"
자세한 내용은 https://pyserial.readthedocs.org/en/latest/tools.html#module-serial.tools.list_ports를 참조하세요.
Thomas의 탁월한 대답에 대한 가능한 개선은 Linux를 사용하고 OSX도 포트를 열고 열 수있는 포트만 반환하도록하는 것입니다. 그 이유는 Linux는 최소한 아무 것도 연결되지 않은 / dev /에있는 파일로 포트의 보트로드를 나열하기 때문입니다. 터미널에서 실행중인 경우 / dev / tty는 작업중인 터미널이고 열고 닫으면 명령 줄이 망가질 수 있으므로 glob은 그렇게하지 않도록 설계되었습니다. 암호:
# ... Windows code unchanged ...
elif sys.platform.startswith ('linux'):
temp_list = glob.glob ('/dev/tty[A-Za-z]*')
result = []
for a_port in temp_list:
try:
s = serial.Serial(a_port)
s.close()
result.append(a_port)
except serial.SerialException:
pass
return result
Thomas의 코드에 대한이 수정은 Ubuntu 14.04에서만 테스트되었습니다.
moylop260 의 답변에 대한 개선 :
import serial.tools.list_ports
comlist = serial.tools.list_ports.comports()
connected = []
for element in comlist:
connected.append(element.device)
print("Connected COM ports: " + str(connected))
여기에는 사용중인 포트를 포함하여 하드웨어에 존재하는 포트가 나열됩니다. pyserial 도구 문서 에 따라 훨씬 더 많은 정보가 목록에 있습니다.
기본적으로 pyserial 문서 https://pyserial.readthedocs.io/en/latest/tools.html#module-serial.tools.list_ports 에서 언급했습니다.
import serial.tools.list_ports
ports = serial.tools.list_ports.comports()
for port, desc, hwid in sorted(ports):
print("{}: {} [{}]".format(port, desc, hwid))
결과 :
COM1 : 통신 포트 (COM1) [ACPI \ PNP0501 \ 1]
COM7 : MediaTek USB 포트 (COM7) [USB VID : PID = 0E8D : 0003 SER = 6 LOCATION = 1-2.1]
pySerial 패키지로 한 줄 솔루션.
python -m serial.tools.list_ports
몇 가지 옵션을 사용할 수 있습니다.
모든 DOS 장치를 나열하려면 NULL lpDeviceName을 사용하여 QueryDosDevice 를 호출하십시오 . 그런 다음 각 장치 이름과 함께 CreateFile 및 GetCommConfig 를 사용 하여 직렬 포트인지 확인합니다.
GUID_DEVINTERFACE_COMPORT의 ClassGuid를 사용하여 SetupDiGetClassDevs 를 호출합니다 .
WMI는 C / C ++ 프로그램에서도 사용할 수 있습니다 .
win32 뉴스 그룹 과 CodeProject, er, project 에 대한 대화가 있습니다 .
이 코드를 시도하십시오 :
import serial
ports = serial.tools.list_ports.comports(include_links=False)
for port in ports :
print(port.device)
우선 직렬 포트 통신을 위해 패키지를 가져와야합니다.
import serial
그런 다음 현재 사용 가능한 모든 직렬 포트 목록을 만듭니다.
ports = serial.tools.list_ports.comports(include_links=False)
그런 다음 전체 목록을 따라 가며 예를 들어 포트 이름을 인쇄 할 수 있습니다.
for port in ports :
print(port.device)
이것은 포트 목록을 가져오고 이름을 인쇄하는 방법의 예일 뿐이지 만이 데이터로 수행 할 수있는 다른 옵션이 있습니다. 이후에 다른 변형을 인쇄 해보십시오.
포트.
참고 URL : https://stackoverflow.com/questions/12090503/listing-available-com-ports-with-python
'ProgramingTip' 카테고리의 다른 글
JUnit에서 정규식 일치 지정 (0) | 2020.11.03 |
---|---|
포인터를 비교하는 방법? (0) | 2020.11.03 |
MATLAB에서 변수는 기본적으로 정말 배정 밀도입니까? (0) | 2020.11.02 |
e.getMessage ()와 e.getLocalizedMessage ()의 차이점 (0) | 2020.11.02 |
Brew Doctor-“경고 : / usr / local / include에서 추출되지 않은 헤더 파일을 발견 했습니까?”? (0) | 2020.11.02 |