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 to 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를 참조 하십시오.
답변
기본적으로 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]
답변
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 패키지로 한 줄 솔루션.
python -m serial.tools.list_ports
답변
이 코드를 시도하십시오 :
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)
이것은 포트 목록을 가져오고 이름을 인쇄하는 방법의 예일 뿐이지 만이 데이터로 수행 할 수있는 다른 옵션이 있습니다. 이후에 다른 변형을 인쇄 해보십시오.
포트.