HOWTO · Python
Python에서 키 누름을 감지하는 방법
keyboard, pynput, readchar를 사용해 Python에서 키보드 입력을 감지하는 방법을 알아보세요. 키를 누르고 놓는 이벤트와 터미널에서의 단일 키 입력도 포함됩니다.
이 페이지의 내용
Python에서 키보드 입력을 감지하려면 입력이 어디에서 오는지에 따라 라이브러리를 선택하세요. keyboard는 시스템 수준의 후크를 제공하고, pynput은 키를 누르고 놓는 콜백을 제공하며, readchar는 Enter를 기다리지 않고 명령줄 프로그램에서 키 하나를 읽습니다. 선택한 패키지를 설치한 다음, 그 콜백이나 읽기 루프를 작업에 맞게 조정하세요. 아래의 패키지별 예제는 타사 라이브러리와 키보드 또는 대화형 터미널에 대한 접근에 의존하므로, API 안내로 표시되며 캡처된 출력은 없습니다.
Python에서 keyboard 모듈을 사용해 키 누름 감지하기
keyboard 패키지는 키보드 이벤트를 받는 후크를 설치할 수 있습니다. 프로그램을 실행하는 것과 동일한 Python 환경에 python -m pip install keyboard로 설치하세요. 일부 운영 체제에서는 전역 키보드 후크에 관리자 권한이 필요하거나 데스크톱 환경에 의해 제한될 수 있습니다. 후크는 키를 누르는 이벤트와 놓는 이벤트를 모두 받습니다. 누름을 보고하는 작업이라면 event.event_type == "down"으로 필터링하세요. 일반적인 통합은 keyboard.hook(on_key_event)로 콜백을 등록하고 keyboard.wait("esc")로 계속 수신 대기합니다. 수신 대기가 끝나지만 프로세스가 다른 작업을 계속할 때는 keyboard.unhook_all()로 후크를 제거하세요. 이벤트 처리가 프로그램의 나머지 부분을 지연시키지 않도록 콜백은 짧게 유지하세요.
이 독립적인 예제는 샘플 이벤트 레코드를 사용해 후크 콜백이 사용하는 필터링 논리를 보여줍니다. 실제 키보드 이벤트를 읽지는 않습니다. 실제 이벤트에는 위의 패키지 통합을 사용하세요.
events = [
{"name": "a", "event_type": "down"},
{"name": "a", "event_type": "up"},
]
for event in events:
if event["event_type"] == "down":
print(f"Key {event['name']} pressed")
Key a pressed
Python에서 pynput 모듈을 사용해 키 누름 감지하기
프로그램이 키를 누르는 경우와 놓는 경우에 별도의 핸들러를 필요로 할 때는 pynput을 사용하세요. python -m pip install pynput으로 설치합니다. 리스너는 keyboard.Listener(on_press=on_press, on_release=on_release)로 생성하고, 컨텍스트 관리자나 start()로 시작합니다. 누름 콜백에서 문자 키는 char 값을 노출하지만, Escape와 같은 특수 키는 그렇지 않을 수 있습니다. 속성이 존재하고 None이 아닌지 확인한 뒤 읽으세요. 놓음 콜백은 키를 keyboard.Key.esc와 비교하고 False를 반환해 리스너를 중지할 수 있습니다. 메인 스레드가 리스너가 끝날 때까지 기다려야 할 때는 join()을 호출하세요. 이 패키지별 콜백 흐름은 pynput을 제공된 런타임에서 사용할 수 없기 때문에 여기에서는 실행되지 않습니다. 운영 체제 권한과 데스크톱 세션 제한도 시스템 입력 접근에 영향을 줄 수 있습니다.
Python에서 readchar 모듈을 사용해 키 누름 감지하기
한 번에 키 하나가 필요한 명령줄 프롬프트에서는 readchar가 사용자가 Enter를 누를 필요 없이 키를 읽습니다. python -m pip install readchar로 설치하세요. 루프 안에서 readchar.readkey()를 호출해 터미널 입력을 동기적으로 기다린 다음, 반환된 키를 "q"와 비교해 루프를 종료합니다. 반환된 다른 키는 도착하는 대로 출력하세요. 이는 터미널 상호 작용에 적합하며, 다른 애플리케이션이 포커스를 가진 동안 키를 감시하는 전역 후크에는 적합하지 않습니다. 화살표 키와 기타 특수 키는 여러 문자 시퀀스로 표현될 수 있으므로, 이를 처리할 때는 터미널과 라이브러리에 문서화된 값과 비교하세요. 이 패키지별 상호 작용은 readchar를 제공된 런타임에서 사용할 수 없기 때문에 여기에서는 실행되지 않습니다.
결론
시스템 키보드 이벤트에 반응하는 후크에는 keyboard를, 키를 누르고 놓는 콜백이나 명시적인 리스너 수명 주기 제어가 프로그램에 맞는 경우에는 pynput을, 간단한 단일 키 명령줄 프롬프트에는 readchar를 선택하세요. 처음 두 가지는 프롬프트 너머의 이벤트를 수신 대기하며 운영 체제 권한에 의존할 수 있습니다. readchar는 활성 터미널에서 읽으며 전역 모니터링은 제공하지 않습니다. 선택한 패키지를 스크립트를 실행하는 환경에 설치하고, Escape나 q와 같은 명확한 중지 조건을 선택해 리스너나 읽기 루프가 예측 가능하게 끝날 수 있도록 하세요.