Develop/Python

[Python] 콘솔에서 단일 키 눌렀을 때 감지하도록 해보자!

JuniTech 2023. 7. 23. 23:58
728x90

Python

 

34. OS별 처리

## 1. 운영체제별 처리 - 정확하게는 Windows와 유닉스계열(Mac, 리눅스)처리로 구분됩니다. - Python에서 콘솔에서 아무키나 누르는 것과 같은 단일 키 누르기를…

wikidocs.net

파이썬에서 코드 실행했을 때 굳이 엔터키를 누르지 않고 해당 키만 누르면 다음 명령을 실행해야 하는 경우가 간혹 존재한다. 이 경우 파이썬에서는 운영체제별로 모듈을 사용하면 된다.

해당 코드를 파이썬 코드에 작성하면 된다.

try:
    # Windows용 코드
    import msvcrt

    def getkey():
        """단일키 누르는 것을 받아옴"""
        return msvcrt.getch().decode('utf-8')

except ImportError:
    # Linux & Mac 용 코드
    import sys
    import tty
    import termios

    def getkey():
        """단일키 누르는 것을 받아옴"""
        fd = sys.stdin.fileno()
        original_attributes = termios.tcgetattr(fd)
        try:
            tty.setraw(sys.stdin.fileno())
            ch = sys.stdin.read(1)
        finally:
            termios.tcsetattr(fd, termios.TCSADRAIN, original_attributes)
        return ch

try 구문에 있는 부분은 Windows에서 mscvrt 모듈을 사용하는 경우이다. Windows에서는 mscvrt 모듈을 사용하여 getch() 메서드를 사용하면 입력 키를 감지할 수 있는 getkey() 함수를 만들 수 있다.

만약 Linux나 Mac의 경우, mscvrt 모듈이 아닌 sys, tty, termios 모듈을 사용해야 한다. 또한 Windows에 비해 getkey() 함수 내의 코드가 상당히 복잡한 편이다.(이해할 필요는 없다. 우리는 이 기능들을 잘 이용하기만 하면 된다.) 해당 코드는 except 구문에 작성되어 있다.

이러한 부분을 이용하면, 콘솔로 미로 게임을 만들 때 방향키를 이용할 수 있는 등 다양하게 활용할 수 있다.

#Python