pynput 라이브러리는 파이썬에서 키보드와 마우스 이벤트를 모니터링하고 제어하는 데 사용되는 라이브러리이다. 이 라이브러리를 사용하면 키보드 및 마우스 입력을 감지하고 원하는 작업을 수행할 수 있다.
1. pynput 라이브러리의 주요 기능
1.1 키보드 제어
특정 키를 누르거나 놓는 것을 시뮬레이션할 수 있다.
특정 키를 입력하는 것을 시뮬레이션할 수 있다.
특정 키 조합(예 : Ctrl + C)을 시뮬레이션할 수 있다.
1.2 마우스 제어
마우스 버튼을 클릭하거나 놓는 것을 시뮬레이션할 수 있다.
마우스 커서를 이동시키는 것을 시뮬레이션할 수 있다.
마우스 스크롤을 시뮬레이션할 수 있다.
1.3 마우스 및 키보드 모니터링
사용자의 키보드와 마우스 입력을 감지하고 이벤트를 처리할 수 있다.
사용자의 입력에 대한 로깅이나 다른 동작을 수행하는 데 사용할 수 있다.
1.4 조합 키 제어
조합 키(예 : Ctrl, Alt, Shift)를 사용하여 다른 키와 조합하여 작업을 수행할 수 있다.
1.5 이벤트 리스너 구현
키보드 및 마우스 이벤트에 대한 리스너를 구현하여 사용자의 입력에 대응하는 코드를 실행할 수 있다.
pynput은 자동화 작업, 게임 자동화, 키로거 작성 등 다양한 사용 사례에 유용하다. 하지만 이러한 라이브러리를 사용할 때는 주의해야 하며, 다른 사람의 프라이버시나 보안을 침해하지 않도록 주의해야 한다.
예제를 학습하기에 앞서 pynput 라이브러리가 설치되어있지 않은 분들은 다음의 명령어를 터미널에 입력하여 설치하자.
pip install pynput
2. 키보드 입력 모니터링 예제
예제 코드
from pynput.keyboard import Key, Listener
def on_press(key):
try:
# 키 입력을 기록
print(f'Key pressed: {key.char}')
except AttributeError:
# 특수 키 기록
print(f'Special key pressed: {key}')
def on_release(key):
# 키 놓음 이벤트 처리
if key == Key.esc:
# 종료
return False
# 키 입력 리스너 생성
with Listener(on_press=on_press, on_release=on_release) as listener:
# 리스너 시작
listener.join()
위의 예제는 pynput 라이브러리를 사용하여 키보드 이벤트를 감지하고 이를 처리하는 Python 코드이다. 코드의 주요 기능은 다음과 같다.
1. pynput.keyboard 모듈로부터 Key와 Listener를 가져온다.
2. on_press(key) 함수 키보드의 키를 누를 때 호출되는 함수다. 이 함수는 key 매개변수로 눌린 키 정보를 전달받는다.
key.char를 통해 일반적인 문자 키의 입력을 기록하고 출력한다.
AttributeError 예외 처리를 사용하여 특수 키(문자가 아닌 키)를 기록하고 출력한다.
3. on_release(key) 함수 키보드의 키를 놓을 때 호출되는 함수이다. key 매개변수로 놓인 키 정보를 받는다.
만약 눌린 키가 Key esc(Esc 키)라면, 리스너를 종료하기 위해 return False를 반환한다. 이로써 프로그램이 종료된다.
4. with 문을 사용하여 Listener 객체를 생성한다. Listener 객체는 키보드 이벤트를 감지하고 처리하는 역할을 한다.
5. listener.join() 함수 무한 루프를 사용하여 키보드 이벤트를 지속적으로 감지하므로, 사용자가 키를 누르거나 놓을 때마다 on_press(key) 및 on_release(key) 콜백 함수가 호출된다. 이러한 콜백 함수는 사용자의 입력을 처리하거나 기록하는 데 사용된다. (더 자세한 내용은 아래 마우스 입력 모니터링 예제에서 다루겠다.)
3. 마우스 입력 모니터링 예제
예제 코드
from pynput.mouse import Listener
# 마우스 클릭 이벤트를 처리하는 함수
def on_click(x, y, button, pressed):
if pressed:
print(f'Mouse clicked at ({x}, {y}) with {button}')
# 마우스 클릭 리스너 생성
with Listener(on_click=on_click) as listener:
# 마우스 클릭 이벤트를 모니터링
listener.join()
마우스 클릭 이벤트를 감지하고 처리하는 예제 코드이다. 코드의 주요 기능은 다음과 같다.
1. pynput.mouse 모듈로부터 Listener 클래스를 가져온다.
2. on_click(x, y, button, pressed) 함수 마우스 클릭 이벤트를 처리하는 함수이다. 이 함수는 네 개의 매개변수를 받고 각 매개변수의 역할은 아래와 같다.
x : 마우스 클릭이 발생한 X 좌표
y : 마우스 클릭이 발생한 Y 좌표
button : 어떤 마우스 버튼이 클릭되었는지를 나타내는 값을 받는다.(예 : Button.left는 왼쪽 마우스 버튼을 의미한다.)
pressed : 마우스 버튼이 눌린 경우 True이며, 놓인 경우 False이다.
3. listener.join() pynput 라이브러리의 Listener 객체를 시작하고, 이벤트를 감지하는 메서드이다. 이 메서드를 호출하면 Listener 객체는 이벤트를 지속적으로 감지하며, 이벤트가 발생할 때마다 지정한 콜백 함수를 호출한다. 아래에서 listener.join()에 대한 더 자세한 설명을 제공한다.
동작
설명
리스너 시작
listener.join()을 호출하면 Listener 객체가 실행되며, 키보드나 마우스 이벤트를 모니터링하기 시작한다. 이러한 이벤트를 모니터링하는 동안 무한 루프에 진입한다.
이벤트 처리
사용자가 키보드를 누르거나 놓거나, 마우스 클릭을 하거나 놓을 때마다, 이벤트가 감지되고 이벤트 핸들러 함수(예 : on_click(), on_press(), on_release())가 호출된다. 이벤트 핸들러 함수는 이벤트에 대한 정보를 인자로 받아서 해당 이벤트를 처리하거나 원하는 작업을 수행한다.
리스너 종료
사용자가 원하는 시점에 프로그램을 종료하려면, 이벤트 핸들러 함수 내에서 특정 조건을 검사하고, 해당 조건이 충족되면 return False를 반환하여 리스너를 종료시킨다. 일반적으로는 사용자가 특정 키(예 : Esc 키)를 눌렀을 대 종료 조건을 설정한다.
프로그램 종료
리스너가 종료되면, 프로그램도 종료된다. 이로써 키보드나 마우스 이벤트를 감지하는 작업이 종료된다.
해당 예제를 실행하면 마우스 클릭 이벤트를 감지하고, 클릭된 위치의 어떤 마우스 버튼이 클릭되었는지를 출력한다. 마우스 버튼이 클릭되면 on_click() 함수가 호출되어 해당 이벤트를 처리한다.