장치 자동화가 멈췄을 때 serial.Serial("COM3")에서 액세스 거부가 보이면 저는 관리자 권한부터 높이지 않아요. 먼저 코드의 포트명이 실제 목록과 맞는지, 다른 프로그램이 장치를 붙잡고 있는지를 확인해야 원인을 더 작게 나눌 수 있습니다. serial.Serial()은 포트 인자를 받으면 객체를 만드는 시점에 포트를 열기 때문에, 예외가 그 줄에서 발생하는지부터 확인하면 진단 범위를 줄일 수 있습니다.
먼저 오류가 발생하는 줄을 확인합니다
import serial
ser = serial.Serial("COM3", timeout=1)
포트를 실제로 열 때 문제가 생기면 PermissionError가 포함된 예외나 SerialException이 나타날 수 있습니다. 이 단계에서는 baud rate나 장치 프로토콜보다 운영체제가 해당 포트를 열 수 있는지가 먼저입니다.
현재 포트명이 실제 목록에 있는지 봐요
장치 관리자에서 본 번호와 코드에 적은 번호가 다를 수 있습니다. pySerial의 포트 목록 도구로 현재 운영체제가 발견한 포트를 확인해 보세요.
from serial.tools import list_ports
for port in list_ports.comports():
print(port.device, "-", port.description)
명령행에서는 다음처럼 상세 목록을 볼 수도 있습니다.
python -m serial.tools.list_ports -v
목록에 COM3이 없다면 권한 문제로 단정하지 말고, 케이블·장치 연결 상태와 실제 포트명을 먼저 확인해야 합니다. 포트 목록의 설명이나 하드웨어 ID가 운영체제에 따라 비어 있을 수도 있습니다.
다른 프로그램이 포트를 잡고 있는지도 확인해요
Windows의 통신 리소스는 다른 프로세스가 사용 중이면 열기 작업이 실패할 수 있어요. 이때는 baud rate를 바꾸기보다 포트를 점유한 프로그램을 먼저 닫는 게 제 판단으로는 더 빠른 확인입니다. PuTTY, 시리얼 터미널, IDE의 모니터 창, 다른 Python 프로세스가 연결을 유지하고 있지 않은지 확인합니다.
관련 프로그램을 종료한 뒤 같은 코드로 한 번만 재시도해 보세요. 이 단계에서 해결된다면 관리자 권한을 추가할 문제가 아니라 포트의 동시 사용 문제였던 것입니다.
설치 환경과 import serial은 따로 확인해요
패키지 설치 이름과 Python 코드에서 불러오는 이름이 달라 혼동하기 쉽습니다.
python -m pip install pyserial
코드에서는 다음처럼 serial을 가져옵니다.
import serial
print(serial.__file__)
설치한 Python과 실행하는 Python이 다르면 설치가 되어 있는데도 import 오류가 날 수 있습니다. 가상환경을 사용한다면 그 환경에서 설치 명령과 실행을 모두 수행하는지 확인합니다. 이 경우는 포트 점유에 의한 액세스 거부와는 다른 계층의 문제입니다.
Windows와 Linux의 접근 조건은 다르게 봐요
Windows에서는 먼저 올바른 COM 포트인지, 다른 프로세스가 사용 중인지 확인합니다. 관리자 실행을 반복하는 것만으로 포트 번호 오류나 점유 문제는 해결되지 않습니다.
Linux와 같은 POSIX 환경에서는 사용자가 시리얼 포트 접근용 그룹에 속해야 할 수 있습니다. Debian 계열에서는 보통 dialout 그룹을 확인 대상에 둡니다. Windows의 COM 포트 점유 문제와 같은 방식으로 판단하면 안 됩니다.
진단 순서를 한 줄로 정리하면
저는 먼저 예외가 Serial() 호출 시점에 나는지 확인하고, list_ports.comports() 목록에서 실제 포트명을 맞춰 봐요. 목록에 장치가 있는데 열리지 않으면 PuTTY·터미널·IDE·다른 Python 프로세스의 점유를 풀고, 그다음 설치와 import serial이 같은 Python 환경을 가리키는지 봅니다.
Windows에서는 포트 점유와 이름을, Linux에서는 시리얼 접근 그룹과 장치 권한을 구분해 확인하세요. 여기까지 맞는데도 열리지 않는다면 케이블·장치 연결 상태를 다시 확인하고, baud rate나 프로토콜은 포트를 연 뒤 통신이 되지 않을 때 살펴보는 편이 순서예요.
이 순서로도 열리지 않는다면 특정 장치의 연결 상태나 운영체제 설정을 더 좁혀야 합니다. baud rate나 장치 프로토콜은 포트를 연 다음 통신이 되지 않을 때 확인할 항목이므로 액세스 거부 단계와 섞지 않는 것이 좋습니다.